In Visual Basic gibt es mehrere Möglichkeiten zur Organisation von Datensätzen:
Standardarrays (Dim arr(10) As Integer): statische Größe, schneller Zugriff über Index, kann nicht dynamisch erweitert werden.
Collection (Objektsammlung): dynamisch erweiterbar, kann Elemente beliebiger Typen speichern (aber ohne strenge Typisierung), Zugriff über Schlüssel und Index, unterstützt For Each.
ArrayList (in VB.NET): veraltete Sammlung, speichert Objekte vom Typ Object, unterstützt keine Generics, erfordert Typumwandlung (Casting).
List(Of T) (in VB.NET): typisierte Sammlung, dynamische Größe, schneller Zugriff, unterstützt LINQ, typsicher.
Beispiele für die Verwendung:
Standardarray:
Dim numbers(4) As Integer numbers(0) = 10
Collection:
Dim coll As New Collection() coll.Add("apple") coll.Add(123) For Each item In coll Debug.Print(item) Next
ArrayList:
Dim arrList As New ArrayList() arrList.Add("abc") arrList.Add(123)
List(Of T):
Dim list As New List(Of Integer)() list.Add(10) list.Add(20) For Each num As Integer In list Console.WriteLine(num) Next
Welches Hauptproblem kann bei der Arbeit mit ArrayList im Vergleich zu List(Of T) auftreten?
Antwort: ArrayList speichert Elemente als Object, daher ist eine explizite Typumwandlung (Casting) beim Zugriff auf die Elemente erforderlich, was die Wahrscheinlichkeit erhöht, während der Laufzeit eine InvalidCastException zu erhalten. List(Of T) bietet die strenge Typisierung zur Compile-Zeit und schließt solche Fehler aus.
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Laufzeitfehler Dim n As Integer = CType(arrList(0), Integer) ' OK
Geschichte
In einem Finanzsystem wurden aktiv Standardarrays zur Speicherung von Daten variabler Größe verwendet. Bei Überschreitung der zuvor zugewiesenen Größe wurden die Arrays "abgeschnitten", was zu Verlusten von Transaktionen während Spitzenbelastungen führte.
Geschichte
Bei der Arbeit mit ArrayList wurden sowohl Strings als auch Zahlen zur Sammlung hinzugefügt, und anschließend wurde versucht, die Summe der Elemente zu berechnen. Infolgedessen stürzte die Anwendung mit einer Ausnahme aufgrund der Typumwandlung ab, da Strings nicht mit Zahlen addiert werden können.
Geschichte
Collection wurde zur Speicherung von Bestellklassen verwendet, aber es wurden keine Typen der Elemente überprüft. In einem Modul wurde versehentlich ein Text anstelle eines Bestellobjekts hinzugefügt, was zu einem Ausfall der gesamten Geschäftslogik führte, als versuchte, Methoden eines nicht existierenden Objekts aufzurufen.