我的类(class)列表为:-
public class Requirement
{
public string Id { get; set; }
public string desc { get; set; }
}
列出 lstRequirement
此列表中有 3 条 Id 和 desc 记录。 我想检查是否有任何项目不为空。
为此,我在下面使用了:-
bool IsHavingValidTags = lstRequirement.All(_=> _.Id!=null && _.desc!=null);
这种情况在上面的 Linq 中工作得很好。 但我想将其设为通用。
例如。将来可能会在 Requirement 类中添加 5 个属性。 添加属性后,我还必须在 Linq 中进行更改。
如何使此 Linq 条件对所有属性通用? 我想检查列表中的任何属性是否为空。
请帮忙..!!!
我尝试过=>
bool IsHavingValidTags = lstRequirement.All(_ => _ != null);
但没有给出想要的结果。
编辑 1:
最佳答案
您可以编写一个使用反射的扩展方法,如下所示:
public static class Extensions
{
public static bool AreAllPropertiesNotNullForAllItems<T>(this IEnumerable<T> items)
{
var properties = typeof(T).GetProperties();
return items.All(x => properties.All(p => p.GetValue(x) != null));
}
}
然后像这样使用:
bool IsHavingValidTags = lstRequirement.AreAllPropertiesNotNullForAllItems();
编辑:
PropertyInfo.GetValue(object obj)
方法重载是在 .NET Framework 4.5 中引入的。如果您使用 .NET Framework 4.0,则需要调用 p.GetValue(x, null)
关于c# - 检查列表中的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40798228/