Megosztás a következőn keresztül:


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 Mainmeghí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.

Lásd még