Achtergrond van de vraag
De collectie List(Of T) is geïntroduceerd in VB.NET om verouderde collecties te vervangen, waarbij typeveiligheid, dynamische resizing en snelle toegang tot elementen via index wordt geboden. Het gebruik van een lijst maakt het mogelijk om gegevens te structureren, met getypeerde elementen te werken en veelvoorkomende fouten die verband houden met niet-generieke collecties te vermijden.
Probleem
Beginners begrijpen vaak niet hoe ze correct toegang kunnen krijgen tot de elementen van de lijst, hoe ze elementen kunnen toevoegen, wijzigen of verwijderen, en wat er gebeurt bij onjuist gebruik van indexen (bijvoorbeeld het overschrijden van de lijstgrenzen). Dit leidt tot uitzonderingen tijdens de uitvoering van het programma.
Oplossing
In List(Of T) worden elementen vanaf nul geïndexeerd. Toegang tot een element gebeurt via de index, zowel voor lezen als schrijven. Als de index ongeldig is, ontstaat er een uitzondering ArgumentOutOfRangeException. De methoden van de collectie stellen je in staat om veilig met elementen te werken:
Voorbeeldcode:
Imports System.Collections.Generic Dim numbers As New List(Of Integer)() numbers.Add(10) numbers.Add(20) Dim first As Integer = numbers(0) ' Verkrijg element met index 0 numbers(1) = 99 ' Stel element in met index 1 ' Verwijderen numbers.RemoveAt(0) ' Verwijder op index
Belangrijke kenmerken:
Als we toegang zoeken tot de index die gelijk is aan het aantal elementen in List(Of T), krijgen we dan het laatste element?
Nee. De indexering begint bij 0, en de maximaal toegestane index is (Count - 1). Bij toegang tot een index gelijk aan Count ontstaat de fout ArgumentOutOfRangeException.
Kan ik een element in het midden van List(Of T) toevoegen zonder bestaande gegevens te verwijderen?
Ja, met behulp van de Insert-methode:
numbers.Insert(1, 42) ' Voegt 42 toe op de tweede positie, verschuift andere naar rechts.
Is het gevaarlijk om de collectie List(Of T) te wijzigen tijdens iteratie met For Each?
Gevaarlijk. Dit leidt tot een InvalidOperationException. Gebruik voor dergelijke bewerkingen For met een index of maak eerst een lijst voor verwijderingen.
In het programma wordt List(Of T) doorlopen met For Each, en binnen de iteratie worden elementen verwijderd.
Voordelen:
Nadelen:
De code doorloopt de elementen van achteren naar voren met For en verwijdert geschikte objecten.
Voordelen:
Nadelen: