签出此程序:
static class Program
{
static void Main()
{
GetLinks();
Console.WriteLine("Program failed!");
}
static IEnumerable<string> GetLinks()
{
throw new Exception();
foreach (var item in new string[] { })
yield return item;
}
}
这很奇怪,但是该程序的结果是Program failed!
,这意味着GetLinks
甚至没有调用该函数。
对这种行为有何解释?
迭代器块是惰性的。您需要通过调用foreach
或之类的名称来调用它。你的迭代器块内的代码将只在第一次调用来执行MoveNext
这foreach
会为你做。
截至目前你只是准备查询,则需要与呼叫兑现它GetEnumerator
后面MoveNext
。
例如,以下代码将按预期失败。
static void Main()
{
foreach(var item in GetLinks())
Console.WriteLine(item );
Console.WriteLine("Program failed!");
}
进一步阅读Iterator块的实现细节
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句