检查初始化对象内的所有值是否为空

Pra*_*ngh 0 c# null list

我有一些代码可以从 Excel 工作表中读取数据并放入列表。

现在出现一个场景,用户复制一些有效数据,然后将很多行留空,然后再次复制有效数据。这会读取很多空行。我正在使用一些旧代码进行 excel 读取 & 可能会在其他地方使用,所以我不想弄乱它。

问题是我在 List 中有很多对象已初始化但所有值都为空。所以我最终检查了所有属性,如果喜欢:

if (lstConsolidatedData != null)
{
    foreach (var lst in lstConsolidatedData)
    {
         if(lst.a!=null && lst.b!=null && lst.c!=null //& so on....)
         {
           //some stuff...
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这不是最好的或可维护的方式,因为可以修改 Excel 表格,因此对于从 excel 添加或删除的单个列,需要再次更改整个列列表代码。

有没有办法lst在单个语句中检查内部所有值是否为空? 就像是lst.all !=null

如果不是代码,任何想法也对我有用。

请注意lst==nullfalse

编辑:使用下面的答案我收到此错误

在此处输入图片说明

编辑: o.GetType().GetProperties().Any(c => c.GetValue(o) == null)适用于任何空值,但我实际上想要删除所有列中不包含数据的行,而不是特定的一两列。o.Item1 != null && ...由于名称/列数经常变化,因此问题也没有解决。

Mat*_*gen 5

您可以使用反射来执行此操作,但请注意,与显式执行相比,它会带来性能损失。

public bool IsAnyPropertyNull(object o)
{
    return o.GetType().GetProperties().Any(c => c.GetValue(o) == null);
}
Run Code Online (Sandbox Code Playgroud)

但是,没有内置表达式来减少o.Item1 != null && o.Item2 != null && ...类型语法。

另外,我假设您正在谈论的值是属性。GetFields如果更合适,您也可以使用或任何您需要的东西。