Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anger att en funktion eller Get accessor är en iterator.
Anmärkningar
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 förekomma i en händelse, instanskonstruktor, statisk konstruktor eller statisk destruktor.
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.