W Visual Basic istnieje kilka sposobów organizowania zbiorów danych:
Standardowe tablice (Dim arr(10) As Integer): statyczny rozmiar, szybki dostęp przez indeks, brak możliwości dynamicznego rozszerzania.
Collection (kolekcja obiektowa): dynamicznie rozszerzalna, może przechowywać elementy dowolnych typów (ale bez ścisłej typizacji), dostęp przez klucz i indeks, wspiera For Each.
ArrayList (w VB.NET): przestarzała kolekcja, przechowuje obiekty typu Object, nie wspiera generyków (Generic), wymaga rzutowania typów (casting).
List(Of T) (w VB.NET): typizowana kolekcja, dynamiczny rozmiar, szybki dostęp, wspiera LINQ, bezpieczna pod względem typu danych.
Przykłady użycia:
Standardowa tablica:
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
Jaki jest główny problem, który może wystąpić podczas pracy z ArrayList w porównaniu z List(Of T)?
Odpowiedź: ArrayList przechowuje elementy jako Object, dlatego wymaga jawnego rzutowania typu (casting) przy dostępie do elementów, co zwiększa ryzyko wystąpienia InvalidCastException w czasie wykonywania. List(Of T) zapewnia ścisłą typizację na etapie kompilacji, eliminując takie błędy.
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Błąd czasu wykonania Dim n As Integer = CType(arrList(0), Integer) ' OK
Historia
W systemie finansowym aktywnie korzystano ze standardowych tablic do przechowywania danych o dynamicznym rozmiarze. Przy przekroczeniu wcześniej przydzielonego rozmiaru tablice były "przecinane", co powodowało utratę transakcji podczas szczytowych obciążeń.
Historia
Przy pracy z ArrayList dodano do kolekcji ciągi i liczby, a potem próbowano obliczyć sumę elementów. W rezultacie aplikacja zawiesiła się z wyjątkiem przy rzutowaniu typu, ponieważ nie można dodać ciągów do liczb.
Historia
Używano Collection do przechowywania klas zamówień, ale nie sprawdzano typów elementów. W jednym module przez pomyłkę dodano tekst zamiast obiektu zamówienia, co doprowadziło do awarii całej logiki biznesowej przy próbie wywołania metod nieistniejącego obiektu.