Dela via


Iterator (Visual Basic)

Anger att en funktion eller Get accessor är en iterator.

Kommentarer

En iterator utför en anpassad iteration över en samling. En iterator använder yield-instruktionen för att returnera varje element i samlingen en i taget. När en Yield instruktion har nåtts behålls den aktuella platsen i koden. Körningen startas om från den platsen nästa gång iteratorfunktionen anropas.

En iterator kan implementeras som en funktion eller som en Get åtkomst till en egenskapsdefinition. Modifieraren Iterator visas i iteratorfunktionens eller Get -accessorns deklaration.

Du anropar en iterator från klientkoden med hjälp av en För varje... Nästa instruktion.

Returtypen för en iteratorfunktion eller Get -accessor kan vara IEnumerable, IEnumerable<T>, IEnumeratoreller IEnumerator<T>.

En iterator kan inte ha några ByRef parametrar.

En iterator kan inte inträffa i en händelse, instanskonstruktor, statisk konstruktor eller statisk destructor.

En iterator kan vara en anonym funktion. Mer information finns i Iteratorer.

Användning

Modifieraren Iterator kan användas i följande sammanhang:

Exempel 1

I följande exempel visas en iteratorfunktion. Iteratorfunktionen har en Yield instruktion som finns i en For... Nästa loop. Varje iteration av instruktionstexten For Each i Main skapar ett anrop till Power iteratorfunktionen. Varje anrop till iteratorfunktionen fortsätter till nästa körning av -instruktionen Yield , som inträffar under nästa iteration av loopen 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

Exempel 2

I följande exempel visas en Get accessor som är en iterator. Modifieraren Iterator finns i egenskapsdeklarationen.

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

Ytterligare exempel finns i Iteratorer.

Se även