c# - 没有匹配项时的 LINQ 结果?

标签 c# linq where-clause

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

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

理解这一点很重要,因为这意味着 results 不能null 同时保留惰性求值的特性 -在您尝试使用 results 之前,它不会确定它是否应该为 null!

关于c# - 没有匹配项时的 LINQ 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1533155/

相关文章:

c# - VB.NET 到 C# 转换器

c# - 如何以编程方式获取 log4net 日志文件的名称模式?

c# - 根据条件合并 List<T> 中的两个或多个 T

c# - 如何在 Linq where 子句中指定动态字段名称?

c# - 有没有比使用 Console.Clear() 更好的制作控制台游戏的方法?

c# - 在 C# 中是否有替代 Constant 的方法?

c# - 构建动态 SQL 查询的最佳实践

c# - 在 List 上执行表达式

mysql - 如果表 1 中的特定元素在表 2 中不存在,则从表 1 中选择

postgresql - 如何在 Postgres 中使用 WHERE 子句添加索引