ここでは、masao が最近知った C# における yield return についてのサンプルを掲載しています。気づいてはいたのですが、今まではシカトしていました。が、今回はじめてムリヤリ使用させられましたので、恨みを忘れないための備忘録として残しています。
スポンサーリンク
yield return のサンプル
yield return によって、呼び出し元に値を返しつつ、処理を継続するサンプルコードになります。呼び出し元で、すべての値を必要とせずに、要素(リターン値)を1つずつ処理することができる場合に効果を発揮します。
すべての値を必要とする場合には、リターン値を、IEnumerable<T> ではなく、List<T> などとすれば良いでしょう(呼び出し元でリターン値を List に格納してもよいとは思いますが、意図が不明で読みにくいコードになると思います)。
void GetIntList()
{
foreach (var i in GetIntListYeild())
{
// 返ってきた値を順次処理することができる
Console.WriteLine(i.ToString());
}
}
// リターン値の型はIEnumerable<T>である必要がある
IEnumerable<int> GetIntListYield()
{
for(int i = 0; i<3; i++)
{
// 呼び出し元に順次要素がリターンされる。
// 本関数内の処理は継続する
Console.WriteLine(i.ToString());
yield return i;
}
}
年のせいか、新しいことを覚えることが苦痛で仕方ありません。そろそろ潮時のような気がします。orz(もう古い?)