当没有匹配时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
引用。