【发布时间】:2013-10-03 20:42:53
【问题描述】:
我在向IList 添加数据时遇到问题,但问题是每次我添加数据时,现有数据都会被当前数据覆盖,我的代码如下所示:
Test test = new Test();
IList<Test> myList = new List<Test>();
foreach (DataRow dataRow in dataTable.Rows)
{
test.PatientID = Convert.ToInt64(dataRow.ItemArray[0]);
test.LastName = dataRow.ItemArray[1].ToString();
test.FirstName = dataRow.ItemArray[2].ToString();
myList.Add(test);
}
这背后的原因是什么?
【问题讨论】:
-
您遇到的问题是该测试是引用类型而不是值类型,当您将测试添加到列表时,您正在添加指向内存测试所在的指针,然后运行下一个循环,您在该内存空间中进行更改,覆盖上一个循环中的数据,因此您需要在循环内使用 New 语句为该循环分配新的内存空间以供使用
-
感谢大家指出我的错误:)
-
这是一个常见的错误,人们会让你花一些时间来理解这个想法,把它想象成一个文件柜,有两种方法可以使用文件柜,你可以把它放在一张包含所有数据的纸(这是价值类型),或者您可以放入一张纸,其中包含有关如何找到存储在其他地方的原始纸的说明(参考类型)在这种情况下您是添加许多带有说明的纸的副本,但始终在原始纸上进行更改,新声明告诉它让您使用新纸