yield

前回、IEnumeratorを継承したオブジェクトを作ってGetEnumeratorで返すことで、foreachによるアクセスを可能にした。
しかし、いちいちオブジェクトを作るのも大変・・・。

GetEnumerator内で、要素ごとにyield returnすれば、その要素を持つ仮想のコレクションオブジェクトを作成し、IEnumeratorを返してくれる・・・。

TestCollection.csでは、

オブジェクトは用意せず、yield returnの後に、要素とする値を指定するだけである・・・。
returnが複数あるのも不思議な感じがするが、foreachで取り出される時、yield returnのところで一旦処理は終了する・・・。
そして、次の要素の取出しの時には、次のyield returnのところまで処理する・・・。
これが繰り返されていくのである・・・。

MainClass.csで、

foreachで値を取り出してみる・・・。

yield return 1 before.
value = 1
yield return 3 before.
value = 3
yield return 5 before.
value = 5
yield return 7 before.
value = 7
yield return 9 before.
value = 9
続行するには何かキーを押してください . . .

このように、foreachの値の取出し時にyield returnのところに来てるのがわかる・・・。

Sample/cs/yield/yield/src/yield at master · bg1bgst333/Sample · GitHub