Yield Deyimi (Visual Basic)
Bir koleksiyona sonraki öğesinin gönderdiği bir For Each...Next ifadesi.
Yield expression
Parametreler
Terim |
Tanım |
expression |
Gerekli.Yineleyici işlevi türüne örtük olarak dönüştürülebilir bir ifade veya Get içeren erişimci Yield ifadesi. |
Notlar
Yield Deyimi belirli bir anda bir topluluğun bir öğesi döndürür.Yield Bir yineleyici işlev deyimi eklediniz veya Get bir koleksiyon özel yineleme gerçekleştiren erişimci.
Bir yineleyici işlevini kullanarak tüketen bir For Each...Next Deyimi (Visual Basic) veya LINQ sorgusu.Her tekrarında For Each döngüsü, yineleyici işlevi çağırır.Zaman bir Yield deyimi Yineleyici işlevinde geldi expression döndürülür, ve kod geçerli konumda korunur.Yürütme Yineleyici işlevi adı verilen bir sonraki açışınızda bu konumdan yeniden başlatılır.
Türünden bir örtük dönüştürme mevcut olmalıdır expression , Yield ifadesine Yineleyici dönüş türü.
Kullanabileceğiniz bir Exit Function veya Return yinelemeyi sonlandırmak için ifade.
"Verim" ayrılmış bir sözcük değildir ve yalnızca içinde kullanıldığında, özel anlamı olan bir Iterator işlevi veya Get erişimci.
Yineleyici işlevleri hakkında daha fazla bilgi ve Get erişimciler, bkz: Yineleyiciler (C# ve Visual Basic).
Yineleyici işlevleri ve Get erişimcileri
Bir yineleyici işlevin bildirimi veya Get erişimci aşağıdaki gereksinimleri karşılaması gerekir:
Eklemeniz gerekir bir Yineleyici değiştirici.
The return type must be IEnumerable, IEnumerable, IEnumerator, or IEnumerator.
Herhangi olamaz ByRef parametreleri.
Bir yineleyici işlevi bir olay, örnek oluşturucu, statik oluşturucu veya statik yıkıcı gerçekleşemez.
Bir yineleyici işlevi, adsız bir işlev olabilir.Daha fazla bilgi için bkz. Yineleyiciler (C# ve Visual Basic).
Özel durum işleme
A Yield deyimi içinde olabilir bir Try , engelleyecek bir Try...Catch...Finally Deyimi (Visual Basic).A Try olan blok bir Yield deyimi olabilir Catch engeller ve olabilir bir Finally blok.
A Yield deyimi içinde olamaz bir Catch blok veya bir Finally blok.
For Each Gövde (Yineleyici işlevi dışında) bir özel durum atar bir Catch işlevindeki Yineleyici bloğu yürütülmez, ancak bir Finally bloğunda Yineleyici işlevi çalıştırılır.A Catch blok içinde bir yineleyici işlevi sadece Yineleyici işlevinin içinde oluşan özel durumları yakalar.
Teknik uygulama
Aşağıdaki kod döndürür bir IEnumerable (Of String) bir yineleyici işlevi ve sonra öğeleri sırayla dolaşır, IEnumerable (Of String).
Dim elements As IEnumerable(Of String) = MyIteratorFunction()
…
For Each element As String In elements
Next
Çağrı MyIteratorFunction işlevinin gövdesini yürütmez.Bunun yerine çağrı döndürür bir IEnumerable(Of String) içine elements değişkeni.
Bir yineleme For Each döngü, MoveNext yöntemi çağrıldığında için elements.Gövdesi bu çağrıyı yürütür MyIteratorFunction kadar İleri Yield deyimi ulaşıldığında.Yield Deyimi döndürür değeri sadece belirleyen ifade element Değişken tüketim döngüsünün gövdesi olarak da Current özelliği, öğelerin bir IEnumerable (Of String).
Her bir sonraki yinelemede For Each döngüsü, yineleyici gövde nereden yürütülmeye ulaştığında yeniden durdurma kapalı, sol bir Yield ifadesi.For Each Döngüsü tamamlandıktan Yineleyici işlevin sonuna veya bir Return veya Exit Function deyimi ulaşıldığında.
Örnek
Aşağıdaki örnek olan bir Yield deyimi içinde olan bir için...Sonraki döngü.Her tekrarında her biri için gövdesi içinde deyim Main bir çağrı oluşturur Power Yineleyici işlevi.Yineleyici işleve yapılan her çağrı geçer Sonraki yürütülmesi için Yield bir sonraki yinelemesini sırasında ortaya çıkan ifade For…Next döngü.
Yineleyici yöntemin dönüş türü IEnumerable, bir yineleyici arabirimi türü.Yineleyici yöntemi çağrıldığında, bir sayı kuvvetleri içeren sayılabilir nesne döndürür.
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
Aşağıdaki örnekte gösterilmiştir bir Get olan bir yineleyici erişimci.Özellik bildirimi içeren bir Iterator değiştirici.
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 (C# ve Visual Basic).
Gereksinimler
Visual Studio 2012