Share via


反復子 (Visual Basic)

Get 関数またはアクセサーが反復子であることを指定します。

解説

反復子は コレクション上のカスタム反復処理します。 反復子はコレクションの各要素を一つずつ返すために Yield,yield ステートメントを使用します。 Yield ステートメントに到達すると、コードの現在の位置は保持されます。 実装はその場所から反復子関数の呼び出しを再起動します。

反復子は、関数またはプロパティ定義の Get のアクセサーとして実行できます。 Iterator の修飾子は Get の反復子関数またはアクセサーの宣言に表示されます。

For Each...Next ステートメント (Visual Basic)を使用してクライアント コードからの反復子をダイヤルします。

Get の反復子関数またはアクセサーの戻り値の型は IEnumerableIEnumerableIEnumerator、または IEnumeratorを使用できます。

反復子は ByRef パラメーターを持つことができません。

反復子は、イベント インスタンス コンストラクター、静的コンストラクター、または静的デストラクターには発生しません。

反復子は、匿名関数です。 詳細については、「反復子 (C# および Visual Basic)」を参照してください。

反復子の詳細については、「反復子 (C# および Visual Basic)」を参照してください。

使用方法

修飾子 Iterator は、次の構文で使用します。

使用例

次の例は、反復子の関数を示します。 反復子の関数に For… Next には のループ内にある Yield ステートメントがあります。 Main の 各には のステートメント本体の各反復で Power の反復子関数に呼び出しを作成します。 反復子の関数に対する各呼び出しは For…Next のループの次の反復処理中に発生する Yield ステートメントの次の実行に進みます。

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

次の例は、反復子である Get のアクセサーを示します。 Iterator の修飾子は、プロパティ宣言にあります。

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

その他の例については、「反復子 (C# および Visual Basic)」を参照してください。

参照

関連項目

Yield ステートメント (Visual Basic)

IteratorStateMachineAttribute

その他の技術情報

反復子 (C# および Visual Basic)