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.