如何访问通用列表中的特定项目

本文关键字:列表 项目 何访问 访问 | 更新日期: 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);
}