[ C# ] yield return って何よ?(呼び出し元に値を返しつつ繰り返し処理を継続する)

Pocket

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

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *