我有一些代码可以从 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==null是false
编辑:使用下面的答案我收到此错误

编辑:
o.GetType().GetProperties().Any(c => c.GetValue(o) == null)适用于任何空值,但我实际上想要删除所有列中不包含数据的行,而不是特定的一两列。o.Item1 != null && ...由于名称/列数经常变化,因此问题也没有解决。
您可以使用反射来执行此操作,但请注意,与显式执行相比,它会带来性能损失。
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如果更合适,您也可以使用或任何您需要的东西。