[英]how to store multiple items in a list in c#
我正在獲取用戶詳細信息列表,並將一些詳細信息存儲到另一個列表中並返回該列表,但問題是最后返回的是正確的行數,但每行的值與最后一行的值相同
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;
}
每次使用新的User對象
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的相同實例添加到列表中。 在循環中,僅為GetUserList類的一個實例更新字段usr.UserID usr.UserFirstName。 因此,效果是(假設lstusers.Count = 10)是您將此對象添加10倍到列表中。 移動GetUserList usr = new GetUserList();
在循環內,並且usr.Message =
也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.