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.