对于迭代器方法中的每个循环

希米·魏兹汉德(Shimmy Weitzhandler)

签出此程序:

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之类的名称来调用它你的迭代器块内的代码将只在第一次调用来执行MoveNextforeach会为你做。

截至目前你只是准备查询,则需要与呼叫兑现它GetEnumerator后面MoveNext

例如,以下代码将按预期失败。

static void Main()
{
    foreach(var item in GetLinks())
        Console.WriteLine(item );
    Console.WriteLine("Program failed!");
}

进一步阅读Iterator块的实现细节

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章