Iterator (Visual Basic)
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 przypadku zdarzenia, konstruktora wystąpienia, konstruktora statycznego lub destruktora statycznego.
Iterator może być funkcją anonimową. Aby uzyskać więcej informacji, zobacz Iteratory.
Użycie
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.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla