打破传递给LINQ函数的函数

时间:2013-05-30 07:59:04

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

我有一个传递给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);
}

3 个答案:

答案 0 :(得分:9)

那是因为懒惰的评价。如果您尝试执行ToList(),函数将进行评估,并且会触发断点 - 即尝试执行:

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

答案 1 :(得分:6)

Enumerables是懒惰的评估。

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

如果你添加:

for(var x in bar) ...

然后你的函数将被调用。

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

答案 2 :(得分:1)

您正在使用延迟执行的LINQ。换句话说,在您需要该操作的结果之前,它不会执行。所以,如果你不得不对它做一个foreach;然后它会执行。