【问题标题】:return a list of objects in c#在c#中返回一个对象列表
【发布时间】:2014-07-05 05:59:40
【问题描述】:

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

这是我的代码:

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' 循环会给出相同的最后一个对象添加到构建器函数中。

【问题讨论】:

    标签: c# list function


    【解决方案1】:

    试试这个

    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 中。

    【讨论】:

      【解决方案2】:

      您需要在循环内创建新的 STU 对象,否则您会不断更改相同的引用对象。

      【讨论】:

      • 我需要 x-y,但我不知道谁更大 C# 中有 max(x,y)-min(x,y) 吗?
      【解决方案3】:

      试试这个:

      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;
      }
      

      【讨论】:

      • 你真的是说:stObj.Add() 吗?
      • 循环内不需要创建stu类对象。
      猜你喜欢
      • 1970-01-01
      • 2021-03-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多