没有匹配项时,LINQ 函数究竟返回什么?以 Where 方法为例:
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
此时的结果是什么?
没有匹配项时,LINQ 函数究竟返回什么?以 Where 方法为例:
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
此时的结果是什么?
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
!
在这种情况下,它返回IEnumerable<Int32>
一个计数为 0 的项目。
对空的引用IEnumerable<T>
。