Zum Inhalt springen

Collection in Collection


Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...