如何访问通用列表中的特定项目
本文关键字:列表 项目 何访问 访问 | 更新日期: 2023-09-27 18:14:03
所以我想使窗体在c#,这将有2个文本框一个将是用户名,另一个将是密码…此外,我将有一个按钮登录。
当用户按下登录按钮时,程序将读取文本文件,其中我存储了几个用户名,它们是这样存储的(用户名,密码,accNum, accBalance),所以在用户输入正确的用户名和密码的情况下,它应该以其他形式显示accNum和accBalance。
直到现在我有这个
private void btnLogIn_Click(object sender, EventArgs e)
{
List<User> users = new List<User>();
User currentuser = new User();
string str;
string[] strarray;
StreamReader sr = new StreamReader("path..");
while (sr.Peek() >= 0)
{
str = sr.ReadLine();
strarray = str.Split(',');
currentuser.username = strarray[0];
currentuser.password = strarray[1];
currentuser.accNumber = double.Parse(strarray[2]);
currentuser.accBalance = double.Parse(strarray[3]);
users.Add(currentuser);
}
}
}
public class User
{
public string username { get; set; }
public string password { get; set; }
public double accNumber { get; set; }
public double accBalance { get; set; }
}
当我尝试输出我的用户时,我得到的是最后一个用户,可能是覆盖,列表中的位置0,我不知道如何避免…
您必须为每个新用户创建要添加到List<User>
的用户对象。如果您不为每个指定的User创建一个新的User对象,那么您只是向List<User>
添加一个对相同User的引用,这导致您应用于List<User>
中存储的User对象之一的每个更改都会影响List<>
的所有其他条目,因为每个条目都是对相同User对象的引用。
在你的例子中,这意味着你必须在while
循环的每次迭代中创建一个新的User对象:
List<User> users = new List<User>();
StreamReader sr = new StreamReader("path..");
while (sr.Peek() >= 0)
{
var str = sr.ReadLine();
var strarray = str.Split(',');
var currentuser = new User(); //Creating a new user for every iteration
currentuser.username = strarray[0];
currentuser.password = strarray[1];
currentuser.accNumber = double.Parse(strarray[2]);
currentuser.accBalance = double.Parse(strarray[3]);
users.Add(currentuser);
}