yield (C# リファレンス)
更新 : 2007 年 11 月
列挙子オブジェクトに値を挿入する場合、または反復処理の終了を通知する場合に、iterator ブロック内で使用されます。形式は次のいずれかになります。
yield return <expression>;
yield break;
解説
expression は、列挙子オブジェクトの値として評価され、返されます。expression は、反復子の yield 型に暗黙に変換できる必要があります。
yield ステートメントは、メソッド、演算子、またはアクセサの本体として使用される iterator ブロック内でのみ使用できます。このようなメソッド、演算子、またはアクセサの本体は、次の制約によって制御されます。
匿名メソッドでは、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 反復子