C# 如何在c中在列表中存储多个项
我正在获取一个用户详细信息列表,并将一些详细信息存储到另一个列表中,然后返回该列表,但问题是最终返回的行数正确,但每行的值与最后一行的值相同C# 如何在c中在列表中存储多个项,c#,asp.net,.net,C#,Asp.net,.net,我正在获取一个用户详细信息列表,并将一些详细信息存储到另一个列表中,然后返回该列表,但问题是最终返回的行数正确,但每行的值与最后一行的值相同 GetUserList usr = new GetUserList(); List<GetUserList> UsersList = new List<GetUserList>(); List<users> lstusers= usersBase.GetUsersListByOrgId(OrgId, null); tr
GetUserList usr = new GetUserList();
List<GetUserList> UsersList = new List<GetUserList>();
List<users> lstusers= usersBase.GetUsersListByOrgId(OrgId, null);
try
{
if (lstusers.Count > 0)
{
usr.Message = "Success";
for (int i = 0; i < lstusers.Count; i++)
{
usr.UserID = Convert.ToInt32(lstusers[i].userID);
usr.UserFirstName = Convert.ToString(lstusers[i].forename);
UsersList.Add(usr);
//return usr;
}
}
else
{
usr.Message = "Failed";
}
return UsersList;
}
catch (Exception e)
{
throw e;
}
只需将usr的声明/实例化移动到循环中:
for (int i = 0; i < lstusers.Count; i++)
{
GetUserList usr = new GetUserList();
usr.UserID = Convert.ToInt32(lstusers[i].userID);
usr.UserFirstName = Convert.ToString(lstusers[i].forename);
UsersList.Add(usr);
//return usr;
}
否则,您将一直向列表中添加对同一GetUserList实例的引用,并覆盖其值-因此,您最终得到的结果是,每一行的值都与最后一行的值相同。您必须在for循环中实例化对象,当前同一对象多次存储在列表中,更改代码如下:
for (int i = 0; i < lstusers.Count; i++)
{
GetUserList usr = new GetUserList(); // not this line
usr.Message = "Success";
usr.UserID = Convert.ToInt32(lstusers[i].userID);
usr.UserFirstName = Convert.ToString(lstusers[i].forename);
UsersList.Add(usr);
}
当前,您每次都在修改同一对象,因此结果将是所有列表项中最后更新的内容。因为您每次都在循环迭代中更新同一用户,并一次又一次地添加到列表中。 每次循环迭代时都应该创建一个新用户
GetUserList usr ;
List<GetUserList> UsersList = new List<GetUserList>();
List<users> lstusers= usersBase.GetUsersListByOrgId(OrgId, null);
try
{
if (lstusers.Count > 0)
{
for (int i = 0; i < lstusers.Count; i++)
{
//create a new instance of user here
usr = new GetUserList();
usr.Message = "Success";
usr.UserID = Convert.ToInt32(lstusers[i].userID);
usr.UserFirstName = Convert.ToString(lstusers[i].forename);
UsersList.Add(usr);
//return usr;
}
}
else
{
usr.Message = "Failed";
}
return UsersList;
}
catch (Exception e)
{
throw e;
}
您正在将同一个GetUserList实例添加到列表中。在循环中,只为GetUserList类的一个实例更新字段usr.UserID usr.UserFirstName。因此,效果是假设lstusers.Count=10,则将该对象添加到列表中的时间为10次。Move GetUserList usr=new GetUserList;在循环内部,也使用usr.Message=。每次都使用新的用户对象
GetUserList usr =null;
List<GetUserList> UsersList = new List<GetUserList>();
List<users> lstusers= usersBase.GetUsersListByOrgId(OrgId, null);
try
{
if (lstusers.Count > 0)
{
// ;
for (int i = 0; i < lstusers.Count; i++)
{
usr= new GetUserList();
usr.Message = "Success"
usr.UserID = Convert.ToInt32(lstusers[i].userID);
usr.UserFirstName = Convert.ToString(lstusers[i].forename);
UsersList.Add(usr);
//return usr;
}
}
else
{
usr.Message = "Failed";
}
return UsersList;
}
catch (Exception e)
{
throw e;
}
您试过调试代码吗?每次在循环中都需要创建一个新的GetUserList usr。在OOP中,对象是一个指向内存块的指针,您不断地向列表添加同一指针,并为同一指针设置一个新值,因此列表中的所有对象都具有相同的值。我想知道这个相同的问题被问了多少次,差异最小。。。