私はyieldを使用していて、どこかで打ったのですが、yieldがどのように機能するかを誰かが説明できますか?私のシーンリオを以下に示します。
public static IEnumerable Power(int number, int exponent)
{
int result = 1;
int counter = 0;
Console.WriteLine("Inside Power - Before While");
while (counter++ < exponent)
{
Console.WriteLine("Inside Power - Inside While");
result = result * number;
yield return result;
//Console.WriteLine("New line added");
}
Console.WriteLine("Inside Power - After While");
}
static void Main(string[] args)
{
foreach (int i in Power(2, 8))
{
Console.WriteLine("{0}", i);
}
}
したがって、ここで取得する出力は次のとおりです。
Inside Power - Before While
Inside power - Inside While
2
Inside power - Inside While
4
Inside power - Inside While
8
Inside power - Inside While
16
Inside power - Inside While
32
Inside power - Inside While
64
Inside power - Inside While
128
Inside power - Inside While
256
Inside power - AfterWhile
だから私の質問は、ポインターがforeachからEnumerableメソッドにどのようにシフトするかということです。メソッド全体が呼び出されず、毎回ループが実行されている間だけが呼び出されるのはなぜですか。