Freigeben über


Iterator (Visual Basic)

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

Hinweise

Ein Iterator führt eine benutzerdefinierte Iteration durch eine Auflistung aus.Ein Iterator verwendet die Ertrag-Anweisung, um jedes einzelne Element in der Auflistung zurückgegeben werden soll.Wenn eine Yield-Anweisung erreicht wird, wird der aktuelle Position im Code beibehalten.Die Ausführung wird von diesem Speicherort beim nächsten Mal neu gestartet, dass die Iterator Funktion aufgerufen wird.

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

Sie rufen den Iterator im Clientcode an, indem Sie For Each...Next-Anweisung (Visual Basic) verwenden.

Der Rückgabetyp einer Funktion oder eines Get Iterator IEnumerable Accessors kann, IEnumerable<T>, IEnumerator oder IEnumerator<T> sein.

Ein Iterator ByRef darf keine Parameter enthalten.

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

Ein Iterator kann eine anonyme Funktion sein.Weitere Informationen finden Sie unter Iteratoren (C# und Visual Basic).

Weitere Informationen zu Iteratoren finden Sie unter Iteratoren (C# und Visual Basic).

Verwendung

Der Iterator-Modifizierer kann in folgenden Kontexten verwendet werden:

Beispiel

Im folgenden Beispiel wird ein Iterator für Reservierungen.Die Iterator Yield-Funktion ist eine Anweisung, die innerhalb einer Schleife Weitere… Next ist.Jede Iteration des Anweisungstexts Für jedes in Main erstellt einen Aufruf der Power Iterator für Reservierungen.Jeder Aufruf der Iterator zur nächsten wechselt das Feature für die Ausführung der Anweisung über Yield, die während der nächsten Iteration der Schleife For…Next 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

Im folgenden Beispiel wird ein Get Accessor, der einen Iterator ist.Der Iterator-Modifizierer ist in die Eigenschaftendeklaration.

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 Iteratoren (C# und Visual Basic).

Siehe auch

Referenz

Yield-Anweisung (Visual Basic)

IteratorStateMachineAttribute

Weitere Ressourcen

Iteratoren (C# und Visual Basic)