前回、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