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