Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 voorkomen in een gebeurtenis, een instantieconstructor, een statische constructor of een 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.