Iterator (Visual Basic)Iterator (Visual Basic)

Gibt an, dass eine Funktion oder Get Accessor, der ein Iterator.Specifies that a function or Get accessor is an iterator.

HinweiseRemarks

Ein Iterator führt eine benutzerdefinierte Iteration durch eine Auflistung.An iterator performs a custom iteration over a collection. Ein Iterator verwendet die Yield Anweisung, um jedes Element in der Auflistung zu einem Zeitpunkt zurückzugeben.An iterator uses the Yield statement to return each element in the collection one at a time. Wenn eine Yield Anweisung erreicht wird, wird die aktuelle Position im Code wird beibehalten.When a Yield statement is reached, the current location in code is retained. Wenn die Iteratorfunktion das nächste Mal aufgerufen wird, wird die Ausführung von dieser Position neu gestartet.Execution is restarted from that location the next time that the iterator function is called.

Ein Iterator kann implementiert werden, wie eine Funktion oder als eine Get Accessor, der eine Eigenschaftsdefinition.An iterator can be implemented as a function or as a Get accessor of a property definition. Die Iterator Modifizierer wird angezeigt, in der Deklaration der Iteratorfunktion oder Get Accessor.The Iterator modifier appears in the declaration of the iterator function or Get accessor.

Sie rufen einen Iterator im Clientcode mithilfe einer für jede... Nächste Anweisung.You call an iterator from client code by using a For Each...Next Statement.

Der Rückgabetyp einer Funktion Iterator oder Get Accessor kann IEnumerable, IEnumerable<T>, IEnumerator, oder IEnumerator<T>.The return type of an iterator function or Get accessor can be IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.

Ein Iterator keine ByRef Parameter.An iterator cannot have any ByRef parameters.

Ein Iterator kann nicht in einem Ereignis, Instanzenkonstruktor, statischen Konstruktor oder statischen Destruktor vorkommen.An iterator cannot occur in an event, instance constructor, static constructor, or static destructor.

Ein Iterator kann mit einer anonymen Funktion sein.An iterator can be an anonymous function. Weitere Informationen finden Sie unter Iteratoren.For more information, see Iterators.

VerwendungUsage

Der Iterator-Modifizierer kann in folgenden Kontexten verwendet werden:The Iterator modifier can be used in these contexts:

BeispielExample

Im folgende Beispiel wird eine Iteratorfunktion veranschaulicht.The following example demonstrates an iterator function. Der Iteratorfunktion verfügt über eine Yield -Anweisung, die innerhalb einer für... Nächste Schleife.The iterator function has a Yield statement that is inside a For…Next loop. Jede Iteration der der für jede -Anweisungstexts in Main erzeugt einen Aufruf an die Power Iteratorfunktion.Each iteration of the For Each statement body in Main creates a call to the Power iterator function. Jeder Aufruf der Iteratorfunktion führt bei der nächsten Iteration der Yield-Schleife zur nächsten Ausführung der For…Next-Anweisung.Each call to the iterator function proceeds to the next execution of the Yield statement, which occurs during the next iteration of the For…Next loop.

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

BeispielExample

Das folgende Beispiel zeigt einen Get-Accessor, der ein Iterator ist.The following example demonstrates a Get accessor that is an iterator. Die Iterator Modifizierer ist in der Eigenschaftendeklaration.The Iterator modifier is in the property declaration.

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.For additional examples, see Iterators.

Siehe auchSee Also

IteratorStateMachineAttribute
IteratorenIterators
Yield-AnweisungYield Statement