yield (C# リファレンス)

更新 : 2007 年 11 月

列挙子オブジェクトに値を挿入する場合、または反復処理の終了を通知する場合に、iterator ブロック内で使用されます。形式は次のいずれかになります。

yield return <expression>;
yield break;

解説

expression は、列挙子オブジェクトの値として評価され、返されます。expression は、反復子の yield 型に暗黙に変換できる必要があります。

yield ステートメントは、メソッド、演算子、またはアクセサの本体として使用される iterator ブロック内でのみ使用できます。このようなメソッド、演算子、またはアクセサの本体は、次の制約によって制御されます。

  • unsafe ブロックは使用できません。

  • メソッド、演算子、またはアクセサのパラメータとして、ref または out は使用できません。

匿名メソッドでは、yield ステートメントを使用できません。詳細については、「匿名メソッド (C# プログラミング ガイド)」を参照してください。

expression と共に yield return ステートメントを使用する場合、catch ブロックまたは catch 句が 1 つ以上含まれている try ブロック内ではこのステートメントを使用できません。詳細については、「例外処理ステートメント (C# リファレンス)」を参照してください。

使用例

次に示す例では、yield ステートメントは反復子ブロック (Power(int number, int power) メソッド) 内で使用されています。Power メソッドが呼び出されると、数値の累乗を含む列挙可能なオブジェクトが返されます。Power メソッドの戻り値の型が IEnumerable (反復子インターフェイス型) である点に注意してください。

public class List
{
    //using System.Collections;
    public static IEnumerable Power(int number, int exponent)
    {
        int counter = 0;
        int result = 1;
        while (counter++ < exponent)
        {
            result = result * number;
            yield return result;
        }
    }

    static void Main()
    {
        // Display powers of 2 up to the exponent 8:
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
    }
}
/*
Output:
2 4 8 16 32 64 128 256 
*/

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 19.3 反復子

  • 22 反復子

参照

概念

C# プログラミング ガイド

参照

foreach、in (C# リファレンス)

反復子の使用 (C# プログラミング ガイド)

その他の技術情報

C# リファレンス