Udostępnij za pośrednictwem


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ż