返回c#中的对象列表

本文关键字:对象 列表 返回 | 更新日期: 2023-09-27 18:11:44

我需要在函数中构建一个列表,然后将其返回给另一个列表变量问题是:在函数内部,列表是正确构建的,但当我将它返回到外部变量时,似乎外部列表的所有元素都与最后一个添加到函数内部的元素相似。原因是什么?

这是我的代码:

List<stu> fillObject(SqlDataReader rd)
    {
        List<stu> stList = new List<stu>();
        stu stObj = new stu();
        while (rd.Read())
        {
            stObj.username = rd["username"].ToString();
            stObj.password = rd["password"].ToString();
            stObj.fname = rd["fname"].ToString();
            stObj.lname = rd["lname"].ToString();
            stObj.faculty = rd["faculty"].ToString();
            stList.Add(stObj);
        }
        return stList;
    }

下面是函数的调用:

var friendsList = fillObject(rd);

所以循环'friendList'会得到与builder函数中添加的最后一个对象相同的对象。

返回c#中的对象列表

试试这个

List<stu> fillObject(SqlDataReader rd)
    {
        List<stu> stList = new List<stu>();
        while (rd.Read())
        {
            stu stObj = new stu();
            stObj.username = rd["username"].ToString();
            stObj.password = rd["password"].ToString();
            stObj.fname = rd["fname"].ToString();
            stObj.lname = rd["lname"].ToString();
            stObj.faculty = rd["faculty"].ToString();
            stList.Add(stObj);
        }
        return stList;
    }

您缺少的是在while中初始化stu,因为只有一个stu对象被一次又一次地添加到stList中。

您需要在循环中创建New STU对象,否则您将不断更改相同的引用对象

Try This:

List<stu> fillObject(SqlDataReader rd)
{
    List<stu> stList = new List<stu>();
    //stu stObj = new stu();
    while (rd.Read())
    {
       stList.Add(new stu 
       {
        username = rd["username"].ToString(),
        password = rd["password"].ToString(),
        fname = rd["fname"].ToString(),
        lname = rd["lname"].ToString(),
        faculty = rd["faculty"].ToString()
      });
    }
    return stList;
}