qxxx Geschrieben 15. Dezember 2009 Geschrieben 15. Dezember 2009 Hi* weiß jemand wie man in einer Collection mit anderen Collections drin, sie nicht löschen kann? Beispiel: Dim BigCollection As New Collection Dim SmallCollection As New Collection SmallCollection.Add("Hello World") BigCollection.Add(SmallCollection) MsgBox(BigCollection(1)(1)) 'Zeigt "Hello World" an SmallCollection.Clear() MsgBox(BigCollection(1)(1)) 'Zeigt Fehler (Collection ist leer) Zweck ist, ich will die SmallCollection im Code temporär zur Datensammung verwenden und sie dann komplett in BigCollection einfügen. Leider geht das nicht da wenn sich schon die SmallCollection in BigCollection befindet und ich sie so wie im Code irgendwo ändere, dann wird sie auch automatisch in der Collection verändert. Gibt es dafür vielleicht bessere Lösungen? Zitieren
.NETter Geschrieben 16. Dezember 2009 Geschrieben 16. Dezember 2009 Hallo! Nur nochmal zusammengefasst... SmallColelction wird befüllt und dann BigCollection hinzugefügt. Danach befüllst Du SmallCollection neu. Dies ändert die in BigCollection enthaltene SmallCollection. Hab ich das so weit richtig verstanden? Wenn ja: Natürlich ändert sich SmallCollection auch wenn es sich in BigCollection befindet. Du hast über den Namen SmallCollection eine Referenz darauf! Du müsstest eine "neue" Collection zu BigCollection hinzufügen. Wie oben beschrieben änderst Du nur immer wieder die gleiche Collection. Dein Code: MsgBox(BigCollection(1)(1)) 'Zeigt Fehler (Collection ist leer) Dies wirft einen Fehler weil die Collection (SmallCollection) vorhanden aber leer ist. Somit ist die zweite Indexangabe "OutOfRange". Wenn Du die SmallCollection nicht "Clearst" sondern mit neuen Werten belegst und dann die SmallCollection "erneut" hinzufügst, wird eine neue Instanz von SmallColelction erstellt und die bereits in BigCollection vorhandene SmallCollection bleibt unverändert. Hier mal als Konsolenanwendung (allerdings C#): using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; namespace _CollInCollTest { class Program { static void Main(string[] args) { Collection<string> smallCollection = new Collection<string>(); Collection<Collection<string>> bigCollection = new Collection<Collection<string>>(); smallCollection.Add("Eintrag1"); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine("SmallCollection wird BigCollection hinzugefügt"); bigCollection.Add(smallCollection); Console.WriteLine("SmallCollection.Clear()"); smallCollection.Clear(); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine(string.Format("Anzahl Elemente in BigCollection: {0}", bigCollection.Count.ToString())); Console.WriteLine("Erstelle neuen Eintrag für SmallCollection"); smallCollection.Add("Eintrag1"); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine("Füge SmallCollection erneut BigCollection hinzu"); bigCollection.Add(smallCollection); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine(string.Format("Anzahl Elemente in BigCollection: {0}", bigCollection.Count.ToString())); Console.ReadKey(); } } } Trotz alledem würde mich interessieren was für Daten Du damit sammelst. Könnte mir vorstellen, dass man das auch anders lösen könnte. Viele Grüße, Thomas Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.