簡體   English   中英

如何在C#的列表中存儲多個項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM