Share via


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.

Zie ook