【问题标题】:Breaking in functions passed to LINQ-functions中断传递给 LINQ 函数的函数
【发布时间】:2013-05-30 07:59:03
【问题描述】:

我有一个传递给Select 的函数。但是当我在所述函数中设置断点时,程序不会中断。

例子:

public static int PlusTwo(int x)
{
  return x + 2;
}

public static void Main(string[] args)
{
  var foo = new[] { 2, 3, 5, 7 };
  var bar = foo.Select(PlusTwo);
}

【问题讨论】:

    标签: c# visual-studio-debugging first-class-functions


    【解决方案1】:

    那是因为懒惰的评估。如果您尝试执行ToList(),则该函数将评估并且断点将被命中 - 即尝试执行:

    var bar = foo.Select(PlusTwo).ToList();
    

    【讨论】:

      【解决方案2】:

      枚举是惰性求值的。

      这意味着在您开始迭代结果之前不会调用您的函数。

      如果添加:

      for(var x in bar) ...
      

      然后你的函数将被调用。

      如果您想立即获得结果,请致电bar.ToArray() 或bar.ToList()。这将在内部迭代枚举以创建结果,这将确保调用该函数。

      【讨论】:

        【解决方案3】:

        您正在使用延迟执行的 LINQ。换句话说,在您想要该操作的结果之前,它不会执行。因此,如果您必须对其进行 foreach ;然后它会执行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-04
          • 2015-01-09
          • 2015-05-02
          • 1970-01-01
          • 2020-07-28
          • 2013-01-27
          • 1970-01-01
          相关资源
          最近更新 更多