使用linq检查列表中的空值
本文关键字:空值 列表 linq 检查 使用 | 更新日期: 2023-09-27 18:04:50
我有一个列表List<OfferComparison> Comparison
。我想检查if
条件下所有项目是否有Value == null
我怎么用linq来做呢?
public class OfferComparison : BaseModel
{
public string Name { get; set; }
public string Value { get; set; }
public bool Valid { get; set; }
}
更新(post C # 7)回答
如果使用c# 7或8,则可以将is
关键字与Linq.All
一起使用:
var result = Comparison.All(item => item.Value is null)
如果使用c# 9,那么可以将is not null
和Linq.Any
一起使用:
var result = Comparison.Any(item => item.Value is not null)
如果使用c# 9,那么也可以将is object
或is {}
与Linq.Any
一起使用:
var result = Comparison.Any(item => item.Value is object)
所有这些选项在某种程度上是等效的。至少在时间复杂度方面,它们都是O(n)
。我猜是"首选"。选择与否完全取决于个人意见。
原始(c# 7之前)答案
All
:
var result = Comparison.All(item => item.Value == null)
基本上,它所做的是迭代集合的所有项,并检查每个项的谓词。如果不匹配- result为false
可以通过linq语句进行检查
var isNull = Comparison.All(item => item.Value == null);
我不完全确定All
和Exists
的内部差异,但它可能是一个好主意,只是检查是否一个条目不为空,然后否定结果:
var result = !Comparison.Exists(o => o.Value != null);
我希望这个查询在找到第一个非空值后退出,因此效率更高一些。
Update: From Enumerable。所有文档:
一旦确定结果,就停止对源的枚举。
因此,使用All
可能不会导致在找到非空值后处理整个列表。
因此,前面提到的可能的性能增益不太可能发生,并且两种解决方案可能没有区别。