产量如何在c#中起作用

时间:2013-02-13 12:42:30

标签: asp.net c#-4.0

我正在使用产量并在某个地方敲击,任何人都可以解释产量是如何工作的 我的场景如下所示。

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方法。 为什么整个方法都没有被调用,只有在每次执行循环时。

1 个答案:

答案 0 :(得分:1)

yield return语句在语义上等同于return语句(将控制流传递给调用方法),然后在foreach循环的下一次迭代中对yield语句进行“goto”。

Return
Goto

公共语言运行时中不存在此行为。它由C#编译器生成的类实现。然后执行此操作并由CLR进行JIT编译。产量是一种语法糖。