Aracılığıyla paylaş


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:

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

Ayrıca bkz.

Diğer Kaynaklar

Yineleyiciler (C# ve Visual Basic)

Deyimler (Visual Basic)