反復子 (Visual Basic)
Get 関数またはアクセサーが反復子であることを指定します。
解説
反復子は コレクション上のカスタム反復処理します。反復子はコレクションの各要素を一つずつ返すために Yield,yield ステートメントを使用します。Yield ステートメントに到達すると、コードの現在の位置は保持されます。実装はその場所から反復子関数の呼び出しを再起動します。
反復子は、関数またはプロパティ定義の Get のアクセサーとして実行できます。Iterator の修飾子は Get の反復子関数またはアクセサーの宣言に表示されます。
For Each...Next ステートメント (Visual Basic)を使用してクライアント コードからの反復子をダイヤルします。
Get の反復子関数またはアクセサーの戻り値の型は IEnumerable、 IEnumerable<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)」を参照してください。