您正在创建一个实例Test
Test test = new Test(); // This is your instance
IList<Test> myList = new List<Test>();
foreach (DataRow dataRow in dataTable.Rows)
{
// Here you change the values of the existing instance each time you loop
test.PatientID = Convert.ToInt64(dataRow.ItemArray[0]);
test.LastName = dataRow.ItemArray[1].ToString();
test.FirstName = dataRow.ItemArray[2].ToString();
myList.Add(test); // but you are still just adding the same reference to the list multiple times
}
然后,由于您从不创建新Test
实例,因此您将多次向列表添加相同的引用。这意味着您本质上只是一遍又一遍地存储相同的对象:如果您对列表中的一项进行任何更改,它将立即在所有其他项目中可见,因为它们本质上是相同的对象
解决方案是将 test 的实例化移动到循环内
IList<Test> myList = new List<Test>();
foreach (DataRow dataRow in dataTable.Rows)
{
Test test = new Test(); // Each loop iteration will now create a new instance of Test
test.PatientID = Convert.ToInt64(dataRow.ItemArray[0]);
test.LastName = dataRow.ItemArray[1].ToString();
test.FirstName = dataRow.ItemArray[2].ToString();
myList.Add(test);
}
如果您需要更好地理解这一点,请查看 .NET 中的引用和值类型并通过引用/值传递
.NET 中的值和引用类型:http:
//msdn.microsoft.com/en-us/library/t63sy5hs.aspx
关于维基百科指针的一些信息
http://en.wikipedia.org/wiki/Pointer_(computer_programming)