Aracılığıyla paylaş


Yineleyici (Visual Basic)

İşlevin veya Get erişimcinin yineleyici olduğunu belirtir.

Açıklamalar

Yineleyici bir koleksiyon üzerinde özel yineleme gerçekleştirir. Yineleyici, koleksiyondaki her öğeyi birer birer döndürmek için Yield deyimini kullanır. Bir Yield deyime 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, işlev olarak veya özellik tanımının erişimcisi Get olarak uygulanabilir. Değiştirici Iterator , yineleyici işlevinin veya Get erişimcinin bildiriminde görünür.

Her İçin... kullanarak istemci kodundan bir yineleyici çağırırsınız. Next Deyimi.

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

Yineleyicinin parametresi ByRef olamaz.

Yineleyici bir olayda, örnek oluşturucusunda, statik oluşturucuda veya statik yıkıcıda gerçekleşemez.

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

Kullanım

Değiştirici Iterator şu bağlamlarda kullanılabilir:

Örnek 1

Aşağıdaki örnekte yineleyici işlevi gösterilmektedir. Yineleyici işlevinin for... içinde bir deyimi vardırYield. Sonraki döngü. içindeki Main For Each deyimi gövdesinin her yinelemesi yineleyici işlevine Power bir çağrı oluşturur. Yineleyici işlevine yapılan her çağrı, döngünün bir sonraki yinelemesi Yield sırasında gerçekleşen deyiminin bir sonraki yürütmesine For…Next devam eder.

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 örnekte yineleyici olan bir Get erişimci gösterilmektedir. Değiştirici Iterator özellik bildirimindedir.

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.