Condividi tramite


Iteratore (Visual Basic)

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

Osservazioni:

Un iteratore esegue un'iterazione personalizzata su una raccolta. Un iteratore usa l'istruzione Yield per restituire uno alla volta gli elementi della raccolta. Quando viene raggiunta un'istruzione Yield, viene mantenuta la posizione corrente nel codice. 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 funzione di accesso Get di una definizione di proprietà. Il modificatore Iterator viene visualizzato nella dichiarazione della funzione iteratore o della funzione di accesso Get.

Per chiamare un iteratore dal codice client, usare un'istruzione For Each...Next.

Il tipo restituito di una funzione iteratore o di una funzione di accesso Get può essere IEnumerable, IEnumerable<T>, IEnumerator o 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 all'interno di un ciclo For…Next. Ogni iterazione del corpo dell'istruzione For Each in Main crea una chiamata alla funzione iteratore Power. 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 modificatore Iterator 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