In Visual Basic zijn er verschillende manieren om datasets te organiseren:
Standaardarrays (Dim arr(10) As Integer): statische grootte, snelle toegang op index, kan niet dynamisch worden vergroot.
Collection (objectcollectie): dynamisch vergroot, kan elementen van verschillende types opslaan (maar zonder strikte typechecking), toegang via sleutel en index, ondersteunt For Each.
ArrayList (in VB.NET): verouderde collectie, slaat objecten van type Object op, ondersteunt geen generics, vereist typecasting.
List(Of T) (in VB.NET): getypeerde collectie, dynamische grootte, snelle toegang, ondersteunt LINQ, typeveilig.
Voorbeelden van gebruik:
Standaardarray:
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
Wat is het belangrijkste probleem dat kan optreden bij het werken met ArrayList in vergelijking met List(Of T)?
Antwoord: ArrayList slaat elementen op als Object, waardoor expliciete typecasting nodig is bij toegang tot de elementen, wat de kans vergroot om een InvalidCastException tijdens runtime te krijgen. List(Of T) zorgt voor strikte typechecking tijdens het compileren, waardoor dergelijke fouten worden uitgesloten.
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Runtime fout Dim n As Integer = CType(arrList(0), Integer) ' OK
Verhaal
In een financieel systeem werden standaardarrays actief gebruikt voor het opslaan van gegevens van dynamische grootte. Wanneer de vooraf toegewezen grootte werd overschreden, werden de arrays "afgekapt", waardoor transacties verloren gingen tijdens piekbelastingen.
Verhaal
Bij het werken met ArrayList voegden ze strings en getallen toe aan de collectie en probeerden daarna de som van de elementen te berekenen. Als gevolg hiervan viel de applicatie met een uitzondering bij het typecasten, omdat strings niet met getallen kunnen worden opgeteld.
Verhaal
Ze gebruikten Collection voor het opslaan van bestelklassen, maar controleerden de types van de elementen niet. In één module voegde ze per ongeluk tekst toe in plaats van een bestelobject, wat leidde tot een storing van de hele bedrijfslogica bij het proberen aanroepen van methoden van een niet-bestaand object.