Si sta creando una singola istanza di 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
}
E poi dal momento che non si è mai creando un nuovo Test
esempio, si aggiunge lo stesso riferimento alla lista più volte. Ciò significa che in pratica si sta semplicemente memorizzando lo stesso oggetto: se si apportano modifiche a un elemento nell'elenco sarà immediatamente visibile in tutti gli altri perché sono essenzialmente lo stesso oggetto
La soluzione è spostare l'istanza di prova all'interno del ciclo
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);
}
Se avete bisogno di capire meglio questo, guardare i tipi di riferimento e il valore in .NET e il passaggio per riferimento/valore
tipi di valore e Ref in .NET: http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx
Alcune informazioni su puntatori su Wikipedia http://en.wikipedia.org/wiki/Pointer_(computer_programming)
http://msdn.microsoft.com/en-us/library/490f96s2.aspx –
il problema che si sta verificando è un tipo di riferimento e non un tipo di valore, quando si aggiunge test all'elenco che si aggiunge un puntatore al test della memoria, quando si esegue il ciclo successivo si apportano le modifiche in quello spazio di memoria sovrascrive i dati dal ciclo precedente, per questo è necessario utilizzare la nuova statistica all'interno del ciclo per allocare un nuovo spazio di memoria per il ciclo da utilizzare – MikeT
Grazie tutto per aver segnalato il mio errore :) – Optimus