9

没有匹配项时,LINQ 函数究竟返回什么?以 Where 方法为例:

var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);

此时的结果是什么?

4

3 回答 3

12

results本身只是一个查询。直到您开始迭代它(显式地或通过类似的调用Count()),都没有检查是否有任何结果。只有当您枚举它时,才会发生任何事情。

所以你可以这样做:

foreach (int x in results)
{
    Console.WriteLine("This won't happen");
}

或者:

Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0

这些中的任何一个都会导致针对范围内的每个项目评估谓词......但在此之前,它根本不会被调用。

理解这一点很重要,因为这意味着results 不能null保留惰性求值功能的同时 - 直到您尝试使用 results,它才知道是否应该使用它null

于 2009-10-07T18:01:45.650 回答
4

在这种情况下,它返回IEnumerable<Int32>一个计数为 0 的项目。

于 2009-10-07T17:50:47.793 回答
3

对空的引用IEnumerable<T>

于 2009-10-07T17:49:34.970 回答