Iterátor (Visual Basic)

Určuje, že funkce nebo Get příslušenství je iterátor.

Poznámky

Iterátor provádí vlastní iteraci kolekce. Iterátor používá příkaz Yield k vrácení každého prvku v kolekci po jednom. Yield Po dosažení příkazu se zachová aktuální umístění v kódu. Provádění je restartováno ze zmíněného umístění pokaždé, když je zavolána funkce iterátoru.

Iterátor lze implementovat jako funkci nebo jako Get přístup k definici vlastnosti. Iterator Modifikátor se zobrazí v deklaraci funkce nebo Get příslušenství iterátoru.

Iterátor z klientského kódu zavoláte pomocí příkazu For Each... Next – příkaz.

Návratový typ funkce iterátoru nebo Get přístupového objektu může být IEnumerable, IEnumerable<T>, IEnumerator, nebo IEnumerator<T>.

Iterátor nemůže mít žádné ByRef parametry.

Iterátor nemůže nastat v události, konstruktoru instance, statickém konstruktoru nebo statickém destruktoru.

Iterátor může být anonymní funkce. Další informace najdete v tématu Iterátory.

Využití

Iterator Modifikátor lze použít v těchto kontextech:

Příklad 1

Následující příklad ukazuje funkci iterátoru. Funkce iterátoru má Yield příkaz, který je uvnitř objektu For... Další smyčka. Každá iterace textu příkazu For Each vytvoří Main volání funkce iterátoru Power . Každé volání funkce iterátoru pokračuje k dalšímu spuštění Yield příkazu, ke kterému dochází během další iterace smyčky For…Next .

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

Příklad 2

Následující příklad ukazuje Get přístup, který je iterátor. Iterator Modifikátor je v deklaraci vlastnosti.

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

Další příklady najdete v tématu Iterátory.

Viz také