C#でも使えるようなので調べてみました。
using System.Collections.Generic;
static IEnumerable<string> ItratorFunc(int times)
{
for(int i = 0; i < times; i++)
{
Console.WriteLine("yield");
yield return $"{i}";
}
}
foreach(var s in ItratorFunc(10))
{
Console.WriteLine(s);
}
ItratorFunc()
は一見すると戻り値の型がIEnumerable<string>ですので0~9までの数字を文字配列として返してforeachするように見えます。ただItratorFunc()
のreturn
手前にyield
が記述されており、普通のreturn
構文とは異なっています。実行結果は以下の通り
yield 0 yield 1 yield 2 ~省略~ yield 9
各要素に対して実施したい共通部分をメソッドとして外に出すことで再利用をしながら、個別の要件はforeach側で処理することで様々なシュチュエーションで柔軟な対応が出来る構文だと思います。
コメント