次の方法で共有


反復子 (Visual Basic)

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

解説

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

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

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

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

反復子は 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)