Yineleyici (Visual Basic)

Bir işlevin veya Get erişimcinin bir yineleyici olduğunu belirtir.

Açıklamalar

Yineleyici bir koleksiyon üzerinde özel bir yineleme gerçekleştirir. Bir yineleyici, koleksiyondaki her öğeyi tek seferde döndürmek için yield ifadesini kullanır. Bir Yield ifadeye ulaşıldığında, koddaki geçerli konum korunur. Yürütme, yineleyici işlevinin bir sonraki çağrılmasında bu konumdan başlar.

Yineleyici, bir işlev olarak veya bir Get özellik tanımının erişimcisi olarak uygulanabilir. IteratorDeğiştirici, Yineleyici işlevinin veya Get erişimcinin bildiriminde görüntülenir.

Her biri Için bir kullanarak istemci kodundan bir yineleyici çağırın ... Sonraki Ifade.

Yineleyici işlevinin veya Get erişimcisinin dönüş türü IEnumerable ,, IEnumerable<T> IEnumerator , veya olabilir IEnumerator<T> .

Yineleyicinin herhangi bir ByRef parametresi olamaz.

Bir olay, örnek Oluşturucu, statik oluşturucu veya statik yok edicisi içinde yineleyici olamaz.

Yineleyici bir anonim işlev olabilir. Daha fazla bilgi için bkz. yineleyiciler.

Kullanım

IteratorDeğiştirici şu bağlamlarda kullanılabilir:

Örnek 1

Aşağıdaki örnekte bir yineleyici işlevi gösterilmektedir. Yineleyici işlevinin, Yield için içindeki bir ifade vardır ... Sonraki döngü. İçindeki her bir for Ifadesinin gövdesi için her yineleme, Main Yineleyici işlevine bir çağrı oluşturur Power . Yineleyici işlevine yapılan her çağrı, Yield döngüsünün bir sonraki yinelemesi sırasında ortaya çıkan deyimin bir sonraki yürütmeye ilerler 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

Örnek 2

Aşağıdaki örnek, Get Yineleyici olan bir erişimciyi gösterir. IteratorDeğiştirici, özellik bildirimidir.

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

Ek örnekler için bkz. yineleyiciler.

Ayrıca bkz.