Iteratore (Visual Basic)

Specifica che una funzione o Get una funzione di accesso è un iteratore.

Commenti

Un iteratore esegue un'iterazione personalizzata su una raccolta. Un iteratore usa l'istruzione Yield per restituire ogni elemento nella raccolta una alla volta. Quando viene raggiunta un'istruzione Yield , la posizione corrente nel codice viene mantenuta. L'esecuzione viene riavviata a partire da quella posizione la volta successiva che viene chiamata la funzione iteratore.

Un iteratore può essere implementato come funzione o come Get funzione di accesso di una definizione di proprietà. Il Iterator modificatore viene visualizzato nella dichiarazione della funzione iteratore o Get della funzione di accesso.

Si chiama un iteratore dal codice client usando un oggetto For Each... Istruzione successiva.

Il tipo restituito di una funzione iteratore o Get di una funzione di accesso può essere IEnumerable, , IEnumerable<T>IEnumeratoro IEnumerator<T>.

Un iteratore non può avere parametri ByRef .

Un iteratore non può verificarsi in un evento, costruttore di istanza, costruttore statico o distruttore statico.

Un iteratore può essere una funzione anonima. Per altre informazioni, vedere Iteratori.

Utilizzo

Il modificatore Iterator può essere usato nei contesti seguenti:

Esempio 1

Nell'esempio seguente viene illustrata una funzione iteratore. La funzione iteratore ha un'istruzione Yield che si trova all'interno di un For... Ciclo successivo . Ogni iterazione del corpo dell'istruzione PowerFor Each in Main crea una chiamata alla funzione iteratore. Ogni chiamata alla funzione iteratore procede fino alla prossima esecuzione dell'istruzione Yield, che si verifica durante l'iterazione successiva del ciclo 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

Esempio 2

Nell'esempio seguente viene illustrata una funzione di accesso Get che è un iteratore. Il Iterator modificatore si trova nella dichiarazione di proprietà.

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

Per altri esempi, vedere Iteratori.

Vedi anche