Iterator (Visual Basic)
Meghatározza, hogy egy függvény vagy Get
tartozék iterátor-e.
Megjegyzések
Az iterátor egyéni iterációt hajt végre egy gyűjteményen keresztül. Az iterátor a Hozam utasítással egyenként adja vissza a gyűjtemény egyes elemeit. Yield
Az utasítás elérésekor a kód aktuális helye megmarad. A végrehajtás az iterátorfüggvény következő meghívásakor indul újra erről a helyről.
Az iterátor függvényként vagy tulajdonságdefiníció kiegészítőjeként Get
is implementálható. A Iterator
módosító megjelenik az iterátorfüggvény vagy Get
tartozék deklarációjában.
Iterátort hívhat meg az ügyfélkódból egy Minden... Következő utasítás.
Az iterátorfüggvény vagy Get
tartozék visszatérési típusa lehet IEnumerable, IEnumerable<T>vagy IEnumeratorIEnumerator<T>.
Az iterátor nem rendelkezhet paraméterekkel ByRef
.
Iterátor nem fordulhat elő eseményben, példánykonstruktorban, statikus konstruktorban vagy statikus destruktorban.
Az iterátor lehet névtelen függvény. További információ: Iterators.
Használat
A Iterator
módosító az alábbi környezetekben használható:
1. példa
Az alábbi példa egy iterátorfüggvényt mutat be. Az iterátorfüggvény egy utasítással Yield
rendelkezik, amely a For... Következő ciklus. A For Each utasítástörzs minden iterációja Main
meghívja az Power
iterátorfüggvényt. Az iterátorfüggvény minden hívása Yield
az utasítás következő végrehajtásával folytatódik, amely a ciklus következő iterációja For…Next
során következik be.
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
2. példa
Az alábbi példa egy Get
iterátort bemutató kiegészítőt mutat be. A Iterator
módosító a tulajdonságdeklarációban található.
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
További példákért lásd : Iterators.