当没有匹配时LINQ结果?

时间:2009-10-07 17:48:18

标签: c# linq where-clause

没有匹配时,LINQ函数究竟返回了什么?采用Where方法,例如:

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

此时的结果会是什么?

3 个答案:

答案 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>的引用。