c# - 检查列表中的所有属性

标签 c# .net linq asp.net-web-api

我的类(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:

enter image description here

最佳答案

您可以编写一个使用反射的扩展方法,如下所示:

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/

相关文章:

c# - Linq 查询 nhibernate;不支持异常

c# - 如何将查询语法转换为方法语法

c# - 切片器连接不显示可透视的更改后数据源

c# - 将现有 .NET 项目部署到 Bluemix

c# - 按任务生成计时器和按计时器生成任务

.net - Base64 编码替代下划线

c# - 将匿名类型设置为 null

c# - 足球模拟中的工作阵型算法

.net - 创建将字符串转换为可为空的数字的通用方法

c# - 从 C# 中的接口(interface)继承 XML 注释