当我有一个代码块时
static void Main()
{
foreach (int i in YieldDemo.SupplyIntegers())
{
Console.WriteLine("{0} is consumed by foreach iteration", i);
}
}
class YieldDemo
{
public static IEnumerable<int> SupplyIntegers()
{
yield return 1;
yield return 2;
yield return 3;
}
}
我可以理解yield return背后的原理为:
- Main()调用SupplyIntegers()
|1| |2| |3| 存储在连续的内存块中。"IEnumerator"指针移动到 |1|。
- 控制权从SupplyInteger()返回到Main()。
- Main()输出该值
- 指针移动到|2|,以此类推。
澄清:
(1) 通常情况下,在一个函数中只允许有一个有效的return语句。当存在多个yield return,yield return,...语句时,C#会如何处理?
(2) 一旦遇到了return语句,控制权就不会再回到SupplyIntegers(),如果允许这样做,那么yield将再次从1开始吗?我的意思是yield return 1?