当没有匹配时LINQ结果?

当没有匹配时,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 

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

这是一个很重要的事情要理解,因为它意味着在保留惰性求null的特性的同时results 不能null – 直到你试图使用 results ,它不会计算出它是否应为null

在这种情况下,它返回一个计数为0项的IEnumerable

对空IEnumerable引用。