使用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; }
}

使用linq检查列表中的空值

更新(post C # 7)回答

如果使用c# 7或8,则可以将is关键字与Linq.All一起使用:

var result = Comparison.All(item => item.Value is null)

如果使用c# 9,那么可以将is not nullLinq.Any一起使用:

var result = Comparison.Any(item => item.Value is not null)

如果使用c# 9,那么也可以将is objectis {}Linq.Any一起使用:

var result = Comparison.Any(item => item.Value is object)

所有这些选项在某种程度上是等效的。至少在时间复杂度方面,它们都是O(n)。我猜是"首选"。选择与否完全取决于个人意见。


原始(c# 7之前)答案

All:

使用linq方法
var result = Comparison.All(item => item.Value == null)

基本上,它所做的是迭代集合的所有项,并检查每个项的谓词。如果不匹配- result为false


可以通过linq语句进行检查

var isNull = Comparison.All(item => item.Value == null);

我不完全确定AllExists的内部差异,但它可能是一个好主意,只是检查是否一个条目不为空,然后否定结果:

var result = !Comparison.Exists(o => o.Value != null);

我希望这个查询在找到第一个非空值后退出,因此效率更高一些。

Update: From Enumerable。所有文档:

一旦确定结果,就停止对源的枚举。

因此,使用All可能不会导致在找到非空值后处理整个列表。

因此,前面提到的可能的性能增益不太可能发生,并且两种解决方案可能没有区别。