Iterator (Visual Basic)
Hiermee geeft u op dat een functie of Get
accessor een iterator is.
Opmerkingen
Een iterator voert een aangepaste iteratie uit over een verzameling. Een iterator gebruikt de Yield-instructie om elk element in de verzameling één voor één te retourneren. Wanneer een Yield
instructie wordt bereikt, blijft de huidige locatie in code behouden. De uitvoering wordt opnieuw gestart vanaf die locatie wanneer de iterator-functie de volgende keer wordt aangeroepen.
Een iterator kan worden geïmplementeerd als een functie of als een Get
toegangsfunctie van een eigenschapsdefinitie. De Iterator
wijzigingsfunctie wordt weergegeven in de declaratie van de iteratorfunctie of Get
accessor.
U roept een iterator aan vanuit clientcode met behulp van een For Each... Volgende instructie.
Het retourtype van een iteratorfunctie of Get
accessor kan zijnIEnumerable, IEnumerable<T>of IEnumeratorIEnumerator<T>.
Een iterator kan geen ByRef
parameters hebben.
Een iterator kan niet optreden in een gebeurtenis, instantieconstructor, statische constructor of statische destructor.
Een iterator kan een anonieme functie zijn. Zie Iterators voor meer informatie.
Gebruik
De Iterator
wijzigingsfunctie kan in deze contexten worden gebruikt:
Voorbeeld 1
In het volgende voorbeeld ziet u een iteratorfunctie. De iterator-functie heeft een Yield
instructie die zich in een For bevindt... Volgende lus. Elke iteratie van de hoofdtekst van de instructie For Each maakt Main
een aanroep naar de Power
iterator-functie. Elke aanroep van de iterator-functie gaat verder met de volgende uitvoering van de Yield
instructie, die plaatsvindt tijdens de volgende iteratie van de For…Next
lus.
Sub Main()
For Each number In Power(2, 8)
Console.Write(number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
Console.ReadKey()
End Sub
Private Iterator Function Power(
ByVal base As Integer, ByVal highExponent As Integer) _
As System.Collections.Generic.IEnumerable(Of Integer)
Dim result = 1
For counter = 1 To highExponent
result = result * base
Yield result
Next
End Function
Voorbeeld 2
In het volgende voorbeeld ziet u een Get
accessor die een iterator is. De Iterator
wijzigingsfunctie bevindt zich in de eigenschapsdeclaratie.
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In theGalaxies.NextGalaxy
With theGalaxy
Console.WriteLine(.Name & " " & .MegaLightYears)
End With
Next
Console.ReadKey()
End Sub
Public Class Galaxies
Public ReadOnly Iterator Property NextGalaxy _
As System.Collections.Generic.IEnumerable(Of Galaxy)
Get
Yield New Galaxy With {.Name = "Tadpole", .MegaLightYears = 400}
Yield New Galaxy With {.Name = "Pinwheel", .MegaLightYears = 25}
Yield New Galaxy With {.Name = "Milky Way", .MegaLightYears = 0}
Yield New Galaxy With {.Name = "Andromeda", .MegaLightYears = 3}
End Get
End Property
End Class
Public Class Galaxy
Public Property Name As String
Public Property MegaLightYears As Integer
End Class
Zie Iterators voor meer voorbeelden.