您正在創建的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
實例,你多次添加相同的參考名單。這意味着您基本上只是一遍又一遍地存儲同一個對象:如果您對列表中的一個項目進行任何更改,它將立即在所有其他項目中可見,因爲它們本質上是相同的對象
解決方案是移動測試循環中的實例
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)
http://msdn.microsoft.com/en-us/library/490f96s2。aspx –
您遇到的問題是因爲該測試是引用類型而不是值類型,當您將測試添加到列表時,您正在添加指向內存測試的指針,然後運行下一個循環時,您將進行更改該內存空間覆蓋前一個循環的數據,因此你需要使用循環內的New statment來爲該循環分配一個新的內存空間來使用 – MikeT
感謝所有感謝指出我的錯誤:) – Optimus