所以我想在c#中创建windows表单,其中有两个文本框,一个是用户名,另一个是密码...另外我还有一个按钮LogIn。
当用户按下LogIn按钮时,程序将读取txt文件,其中我存储了少量用户名,它们存储如下(用户名,密码,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,我不知道如何避免...
答案 0 :(得分:0)
您必须为每个User new创建要添加到List<User>
的用户对象。如果您没有为每个指定的用户创建一个新的User对象,那么您只需将对同一用户的引用添加到List<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);
}