Collecties in Visual Basic zijn nodig om een groep objecten of waarden in een variabele op te slaan. Standaardcollecties zoals Collection, ArrayList en generieke List(Of T) bieden verschillende methoden voor toegang, toevoegen en verwijderen van elementen, en verschillen in typeveiligheid, prestaties en mogelijkheden.
In klassiek VB6 was er alleen de getypeerde collectie Collection. In .NET kwamen krachtigere structuren beschikbaar, waaronder ArrayList (een oude universele type zonder strikte typebinding) en moderne generieke collecties (Generic Collections) zoals List(Of T), die beschikbaar kwamen in .NET 2.0.
De grootste uitdaging is het kiezen van de juiste collectie voor de taken van het project. Collecties zonder strikte typebinding (ArrayList, Collection) kunnen leiden tot runtime fouten of prestatieproblemen. Generieke collecties vereisen parameterisatie, maar bieden maximale veiligheid en gebruiksgemak bij het werken met types.
Gebruik de oude collectie Collection alleen voor interactie met verouderde code, en geef de voorkeur aan List(Of T) voor nieuwe projecten. De collectie ArrayList is alleen nuttig wanneer er geen informatie is over het type elementen, maar het is beter om List(Of Object) of andere generieke collecties te gebruiken.
Voorbeeldcode:
' Collection Dim coll As New Collection() coll.Add("Hallo") coll.Add(123) ' ArrayList Dim arr As New ArrayList() arr.Add("Wereld") arr.Add(456) ' List(Of T) Dim list As New List(Of Integer)() list.Add(789) list.Add(101112)
Belangrijke kenmerken:
Wat is het verschil tussen Collection en een array in Visual Basic?
Een array fixeert de grootte bij initiatie, slaat elementen van één type op en ondersteunt snelle toegang per index. Collection wordt dynamisch vergroot, kan objecten van verschillende types opslaan, en ondersteunt toegang per sleutel (maar niet-indexeerbaar in VB6).
Wat gebeurt er als je probeert een object met een duplicate sleutel aan Collection toe te voegen?
Het proberen om een element met een al bestaande sleutel toe te voegen leidt tot een runtime fout "Key already exists in collection".
Dim c As New Collection() c.Add("een", "a") c.Add("twee", "a") ' Fout
Kan ArrayList op de gebruikelijke manier naar List(Of T) worden geconverteerd?
Nee, gewone conversie is niet mogelijk — je moet handmatig een nieuwe List(Of T) maken en de geschikte elementen kopiëren, anders ontstaan runtime fouten door de niet-strikte typebinding van ArrayList.
In een project voor klantopslag wordt een ArrayList gebruikt, waar per ongeluk een string in plaats van een Client-object aan is toegevoegd. Tijdens de verwerking ontstaat een typecast-fout die moeilijk te traceren is.
Voordelen:
Nadelen:
Een strikt getypeerde List(Of Client) wordt gebruikt, de hele code compileert met de optie Strict On. Fouten worden ontdekt tijdens de compilatie, de structuur is gemakkelijk uit te breiden met nieuwe LINQ-methoden.
Voordelen:
Nadelen: