3

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

3 回答 3

9

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

var bar = foo.Select(PlusTwo).ToList();
于 2013-05-30T08:00:54.447 回答
6

枚举是惰性求值的。

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

如果添加:

for(var x in bar) ...

然后你的函数将被调用。

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

于 2013-05-30T08:00:53.223 回答
1

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

于 2013-05-30T08:01:51.900 回答