Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Określa, że funkcja lub Get akcesorium jest iteratorem.
Uwagi
Iterator wykonuje iterację niestandardową w kolekcji. Iterator używa instrukcji Yield , aby zwrócić każdy element w kolekcji pojedynczo. Po osiągnięciu instrukcji bieżąca Yield lokalizacja w kodzie jest zachowywana. Wykonanie jest uruchamiane ponownie z tej lokalizacji przy następnym wywołaniu funkcji iteratora.
Iterator można zaimplementować jako funkcję lub jako metodę Get dostępu do definicji właściwości. Modyfikator Iterator pojawia się w deklaracji funkcji iteratora lub Get metody dostępu.
Iterator jest wywoływany z kodu klienta przy użyciu elementu Dla każdego... Następna instrukcja.
Zwracany typ funkcji iteratora lub Get metody dostępu może być IEnumerable, IEnumerable<T>, IEnumeratorlub IEnumerator<T>.
Iterator nie może mieć żadnych ByRef parametrów.
Iterator nie może wystąpić w zdarzeniu, konstruktorze instancji, konstruktorze statycznym lub destruktorze statycznym.
Iterator może być funkcją anonimową. Aby uzyskać więcej informacji, zobacz Iteratory.
Zastosowanie
Modyfikator Iterator może być używany w następujących kontekstach:
Przykład 1
W poniższym przykładzie pokazano funkcję iteratora. Funkcja iteratora ma instrukcję Yield wewnątrz elementu For... Następna pętla. Każda iteracja treści instrukcji For Each w Main obiekcie tworzy wywołanie funkcji iteratora Power . Każde wywołanie funkcji iteratora przechodzi do następnego wykonania Yield instrukcji, która występuje podczas następnej For…Next iteracji pętli.
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
Przykład 2
W poniższym przykładzie pokazano metodę Get dostępu, która jest iteratorem. Modyfikator Iterator znajduje się w deklaracji właściwości.
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
Aby uzyskać dodatkowe przykłady, zobacz Iteratory.