Freigeben über


Iterator (Visual Basic)

Gibt an, dass eine Funktion oder Get ein Accessor ein Iterator ist.

Bemerkungen

Ein Iterator führt eine benutzerdefinierte Iteration über eine Sammlung aus. Ein Iterator verwendet die Yield-Anweisung , um jedes Element in der Auflistung einzeln zurückzugeben. Wenn eine Yield Anweisung erreicht ist, wird die aktuelle Position im Code beibehalten. Die Ausführung wird von diesem Speicherort neu gestartet, wenn die Iteratorfunktion das nächste Mal aufgerufen wird.

Ein Iterator kann als Funktion oder als Get Accessor einer Eigenschaftsdefinition implementiert werden. Der Iterator Modifizierer wird in der Deklaration der Iteratorfunktion oder Get des Accessors angezeigt.

Sie rufen einen Iterator aus Clientcode mithilfe einer For Each auf... Next-Anweisung.

Der Rückgabetyp einer Iteratorfunktion oder Get eines Accessors kann wie IEnumerable, IEnumerable<T>, , IEnumeratoroder IEnumerator<T>.

Ein Iterator kann keine ByRef Parameter haben.

Ein Iterator kann nicht in einem Ereignis, Instanzenkonstruktor, statischen Konstruktor oder statischen Destruktor vorkommen.

Ein Iterator kann eine anonyme Funktion sein. Weitere Informationen finden Sie unter Iteratoren.

Verwendung

Der Iterator Modifizierer kann in folgenden Kontexten verwendet werden:

Beispiel 1

Im folgenden Beispiel wird eine Iteratorfunktion veranschaulicht. Die Iteratorfunktion weist eine Yield Anweisung auf, die sich in einem For befindet... Nächste Schleife. Jede Iteration des Textkörpers der For Each-AnweisungMain erstellt einen Aufruf der Power Iteratorfunktion. Jeder Aufruf der Iteratorfunktion fährt mit der nächsten Ausführung der Yield Anweisung fort, die während der nächsten Iteration der For…Next Schleife auftritt.

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

Beispiel 2

Im folgenden Beispiel wird ein Get Accessor veranschaulicht, der ein Iterator ist. Der Iterator Modifizierer befindet sich in der Eigenschaftsdeklaration.

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

Weitere Beispiele finden Sie unter Iterators.

Siehe auch