同一对象被添加到对象列表中

时间:2019-05-29 07:14:39

标签: c# asp.net-mvc

我在db中有5条记录,我想在UI上显示它们,但是使用下面的代码在迭代时显示不同的对象,但是在列表中它显示相同的对象5次 帮助我,告诉我是否可以有更好的编码实践

我已使用For循环进行迭代,并将记录添加到朋友列表中

  public ViewResult Contact()
    {
        Friends friend = new Friends();
        List<Friends> friends = new List<Friends>();
        string connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("select * from Friends", con);
        SqlDataAdapter da = new SqlDataAdapter();
        DataTable dt = new DataTable();
        da.SelectCommand = cmd;
        da.Fill(dt);

        for (var i = 0; i < dt.Rows.Count; i++)
        {
            friend.friendId = Convert.ToInt32(dt.Rows[i]["FriendId"]);
            friend.firstName = dt.Rows[i]["FirstName"].ToString();
            friend.lastName = dt.Rows[i]["LastName"].ToString();
            friend.currentAmountGiven = Convert.ToInt32(dt.Rows[i]["CurrentAmountGiven"]);
            friend.totalAmount = Convert.ToInt32(dt.Rows[i]["TotalAmount"]);
            friends.Add(friend);
        }
        return View(friends);

    }

在“朋友”中,我从数据库获得5次相同的行

需要我上面所说的输出

2 个答案:

答案 0 :(得分:2)

您需要在内部 Friends实例化for loop对象。

在您的情况下,您要在Friends外部创建for loop对象的实例,并在每次迭代中更改其属性的值,这就是为什么您的代码每次都以列表中的相同实例结尾时的原因。 / p>

您需要每次创建Friends的新实例,每次都为其属性分配值,并在每次迭代中将其添加到列表中

    for (var i = 0; i < dt.Rows.Count; i++)
    {
        Friends friend = new Friends();  // Change scope of friends from function level to for loop level.
        friend.friendId = Convert.ToInt32(dt.Rows[i]["FriendId"]);
        friend.firstName = dt.Rows[i]["FirstName"].ToString();
        friend.lastName = dt.Rows[i]["LastName"].ToString();
        friend.currentAmountGiven = Convert.ToInt32(dt.Rows[i]["CurrentAmountGiven"]);
        friend.totalAmount = Convert.ToInt32(dt.Rows[i]["TotalAmount"]);
        friends.Add(friend);
    }

答案 1 :(得分:1)

您一次又一次地更改同一个朋友对象。

尽管属性每次都会更改,但仍然是相同的对象引用。

这应该有效:

public ViewResult Contact()
{
    List<Friends> friends = new List<Friends>();
    string connectionString = 
        ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand("select * from Friends", con);
    SqlDataAdapter da = new SqlDataAdapter();
    DataTable dt = new DataTable();
    da.SelectCommand = cmd;
    da.Fill(dt);

    for (var i = 0; i < dt.Rows.Count; i++)
    {

        Friends friend = new Friends();
        friend.friendId = Convert.ToInt32(dt.Rows[i]["FriendId"]);
        friend.firstName = dt.Rows[i]["FirstName"].ToString();
        friend.lastName = dt.Rows[i]["LastName"].ToString();
        friend.currentAmountGiven = Convert.ToInt32(dt.Rows[i]["CurrentAmountGiven"]);
        friend.totalAmount = Convert.ToInt32(dt.Rows[i]["TotalAmount"]);
        friends.Add(friend);
    }
    return View(friends);
}

请参见Here,以了解有关引用类型的更多信息。

另外,还有一些编码技巧:

  1. 使用单数命名您的类,单个Friends对象不是 实际上是朋友,这是Friend
  2. 名称属性(例如FirstName,LastName等),而不是firstName lastName。这只是一个公认的惯例。