ここでは、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(もう古い?)