Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.