【发布时间】:2010-12-08 11:40:09
【问题描述】:
当我有一个代码块时
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;
}
}
我可以将收益回报背后的原理解释为
- Main() 调用 SupplyIntegers()
|1| |2| |3| are stored in contiguous memory block.Pointer of "IEnumerator" Moves to |1|- 控制从 SupplyInteger() 返回到 Main()。
- Main() 打印值
- 指针移至 |2|,依此类推。
澄清:
(1) 通常我们会在一个函数中允许一个有效的返回语句。如何做 当多个 yield return ,yield return,... 语句存在时,C# 处理?
(2) 一旦遇到返回就没有办法控制再次返回 SupplyIntegers(),如果允许,Yield 不会再次从 1 开始吗?我的意思是收益率回报1?
【问题讨论】:
-
再次询问一本书:C# in Depth (Manning, Skeet),第 6 章。它是免费示例章节,涵盖迭代器块。它不完全是一本 C# 初学者书籍(远非如此),但您将很难找到关于该主题的更好参考。
-
如果权限允许问“你没写过书吗?”
-
不,我没有。我为出版商做一些校对,偶尔会写一些奇怪的文章等。但我没有书。
-
如果你这样做我会很高兴,因为我已经看到你对一些问题的解释。它适合从初学者到资深程序员
标签: c# enumeration