jas*_*onh 8 c# linq where-clause
当没有匹配时,LINQ函数究竟返回了什么?以Where方法为例,例如:
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
Run Code Online (Sandbox Code Playgroud)
在这一点上会有什么结果?
Jon*_*eet 10
results本身只是一个查询.直到你开始迭代它(显式或通过类似的调用Count()),没有任何东西检查是否有任何结果.只有当你列举它时才会发生任何事情.
所以你可以这样做:
foreach (int x in results)
{
Console.WriteLine("This won't happen");
}
Run Code Online (Sandbox Code Playgroud)
要么:
Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0
Run Code Online (Sandbox Code Playgroud)
这些中的任何一个都会导致对范围中的每个项目评估谓词...但在此之前,它根本不会被调用.
这是需要理解的重要事情,因为这意味着results 不可能是null同时保留懒惰评价的功能-直到你试图使用 results,就不会制定出是否应该null或不!
| 归档时间: |
|
| 查看次数: |
4316 次 |
| 最近记录: |