Kollektionen in Visual Basic sind notwendig, um eine Gruppe von Objekten oder Werten in einer Variable zu speichern. Standardkollektionen wie Collection, ArrayList und generische List(Of T) bieten verschiedene Methoden zum Zugreifen, Hinzufügen und Entfernen von Elementen und unterscheiden sich in Bezug auf Typensicherheit, Leistung und Möglichkeiten.
In klassischem VB6 gab es nur die typisierte Kollektion Collection. In .NET wurden leistungsfähigere Strukturen eingeführt, darunter ArrayList (ein alter allgemeiner Typ ohne strenge Typisierung) und moderne generische Kollektionen (Generic Collections) wie List(Of T), die in .NET 2.0 eingeführt wurden.
Die größte Schwierigkeit besteht darin, die geeignete Kollektion für die Anforderungen des Projekts auszuwählen. Ungetypte Kollektionen (ArrayList, Collection) können zu Laufzeitfehlern oder Leistungsproblemen führen. Generische Kollektionen erfordern eine Parametrisierung, bieten jedoch maximale Sicherheit und Benutzerfreundlichkeit im Umgang mit Typen.
Verwenden Sie die alte Kollektion Collection nur zur Interaktion mit veraltetem Code, und bevorzugen Sie für neue Projekte List(Of T). Die Kollektion ArrayList ist nur nützlich, wenn keine Informationen über den Typ der Elemente vorliegen, aber dafür ist es besser, List(Of Object) oder andere Kollektionen aus Generics zu verwenden.
Codebeispiel:
' Collection Dim coll As New Collection() coll.Add("Hello") coll.Add(123) ' ArrayList Dim arr As New ArrayList() arr.Add("World") arr.Add(456) ' List(Of T) Dim list As New List(Of Integer)() list.Add(789) list.Add(101112)
Wichtige Merkmale:
Was unterscheidet Collection von einem Array in Visual Basic?
Ein Array hat eine feste Größe bei der Initialisierung, speichert Elemente eines Typs und unterstützt schnellen Zugriff über den Index. Eine Collection wächst dynamisch, kann Objekte unterschiedlicher Typen speichern und unterstützt den Zugriff über Schlüssel (aber ist in VB6 nicht indizierbar).
Was passiert, wenn versucht wird, ein Objekt mit einem bereits vorhandenen Schlüssel zur Collection hinzuzufügen?
Der Versuch, ein Element mit einem bereits vorhandenen Schlüssel hinzuzufügen, führt zu einem Laufzeitfehler "Key already exists in collection".
Dim c As New Collection() c.Add("one", "a") c.Add("two", "a") ' Fehler
Kann man ArrayList standardmäßig in einen List(Of T) umwandeln?
Nein, eine normale Umwandlung ist nicht möglich – man muss manuell eine neue List(Of T) erstellen und die passenden Elemente kopieren, ansonsten treten Laufzeitfehler aufgrund der nicht strengen Typisierung von ArrayList auf.
In einem Projekt wird ein ArrayList zur Speicherung von Kunden verwendet, in das versehentlich eine Zeichenfolge anstelle eines Client-Objekts eingefügt wurde. Während der Verarbeitung tritt ein Typumwandlungsfehler auf, der schwer nachzuvollziehen ist.
Vorteile:
Nachteile:
Es wird eine streng typisierte List(Of Client) verwendet, und der gesamte Code wird mit der Option Strict On kompiliert. Fehler werden bereits zur Kompilierungszeit erkannt, die Struktur lässt sich leicht mit neuen LINQ-Methoden erweitern.
Vorteile:
Nachteile: