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.