我需要在函数中构建一个列表,然后将其返回到另一个列表变量 问题是:在函数内部列表是正确构建的,但是当我将它返回到外部变量时,外部列表的所有元素似乎都与在函数内添加到它的最后一个元素类似。这是什么原因?
这是我的代码:
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);
通过&#39; friendList&#39;循环播放将在构建器函数中添加相同的最后一个对象。
答案 0 :(得分: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;
}
您缺少的是在stu
内初始化while
,因为只有一个stu
对象被一次又一次地添加到stList
。
答案 1 :(得分:0)
您需要在循环内创建新的STU对象,否则您将继续更改相同的引用对象。
答案 2 :(得分:0)
试试这个:
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;
}