Sie eine einzelne Instanz 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
}
erstellen und dann, da Sie nie eine neue Test
Instanz erstellen, die Sie hinzufügen den gleichen Verweis auf die Liste mehrere Male. Dies bedeutet, dass Sie im Wesentlichen nur das gleiche Objekt immer wieder speichern: Wenn Sie Änderungen an einem Element in der Liste vornehmen, wird es sofort in allen anderen Objekten sichtbar sein, da sie im Wesentlichen das gleiche Objekt sind
Die Lösung besteht darin, zu verschieben die Instantiierung Test innerhalb der Schleife
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);
}
Wenn Sie diese besser verstehen müssen, schauen Sie sich Referenz- und Werttypen in .NET und Weitergabe von reference/Wert
Wert und Ref-Typen in .NET: http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx
Einige Informationen über Zeiger auf Wikipedia http://en.wikipedia.org/wiki/Pointer_(computer_programming)
http://msdn.microsoft.com/en-us/library/490f96s2.aspx –
Das Problem, das Sie als dieser Test haben, ist ein Referenztyp nicht ein Werttyp, wenn Sie Test zu der Liste hinzufügen, fügen Sie einen Zeiger auf den Speichertest sitzt in, wenn Sie dann die nächste Schleife ausführen Sie die Änderungen vornehmen Dieser Speicherbereich überschreibt die Daten der vorherigen Schleife. Aus diesem Grund müssen Sie die Anweisung New in der Schleife verwenden, um einen neuen Speicherplatz für diese Schleife zu reservieren. – MikeT
Vielen Dank für den Hinweis auf meinen Fehler :) – Optimus