Guten Morgen zusammen,
ich stege gerade etwas auf dem schlauch folgenden Code betreffend: (ich hab ihn extra vereinfacht, handelt sich normalerweise um eine DB-Query...)
string[] data = new string[] { "1", "2", "3", "4" };
ArrayList final = new ArrayList();
List<string> entrys = new List<string>();
foreach (string n in data)
{
entrys.Clear();
entrys.Add(n);
final.Add(entrys);
}
Wenn ihr das ganze durchlaufen lasst, habt ihr am Schluss 4x die "4" anstelle aller Zahlen... mein Ziel ist es, mehere elemente und einer Liste vom Typ String zusammeln und diese anschließend in eine ArrayList hinzuzufügen. In diesem Beispiel erscheint das nicht sinnvoll, in größeren komplexen Querys allerdings schon.
Wo liegt mein Fehler? Wieso werden jedesmal die zuvor eingefügten Werte überschrieben?
Hallo vitafit,
wichtig: ArrayList
gehört in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections
nicht mehr benutzt werden. Verwende stattdessen List<T>
und alle anderen typisierten Collections aus System.Collections.Generic
.
Zu deiner Frage: Du fügst deiner ArrayList
nicht viermal einen String hinzu, sondern viermal die gleiche Liste entrys
. Dadurch, dass es ein und dieselbe Liste ist, die du der ArrayList
mehrfach hinzufügst, verweisen natürlich alle Elemente auf genau diese eine Liste — von der wird keine Kopie erzeugt, sondern lediglich den ArrayList
-Elementen mehrfach die Referenz auf die gleichen Liste zugewiesen.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Den Umgang mit Collections und die Besonderheiten von Referenztypen setzen wir als bekannt voraus, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1.