阅读几篇文章后:http : //csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx
有一点我不太明白并且很好奇.
我很想知道foreach循环可以在所有产量完成之前利用产生函数的结果.
以下功能为例:
public static IEnumerable<int> RandomFunction()
{
for (int i = 0; i < int.MaxValue; i++)
yield return i;
}
public static void PrintRandomResult1()
{
foreach (var i in RandomFunction())
Console.WriteLine(i);
}
public static void PrintRandomResult2()
{
IEnumerable<int> Enumerable = RandomFunction();
foreach(var i in Enumerable)
Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)
如果我们使用PrintRandomResult2,我会假设随机函数在foreach生物之前已经达到了它的所有产量; 但是,如果我们直接在foreach中调用RandomFunction,迭代会在RandomFunction完成之前开始吗?