从对象列表中删除列

时间:2016-10-20 11:17:10

标签: c# .net loops c#-4.0

我有一个课程如下:

public class Entity 
{
    public string Name {get;set;}
    public int ID {get;set;}
    public string Desc {get;set;}
}

我有List Entity

List<Entity> ent = new List<Entity>()
{
    new Entity {Name ="A", ID =1},
    new Entity {Name ="B", ID = 2}
};

在列表中,我们可以观察&#34; Desc &#34;每个对象的值为空。有没有办法找到属性Name,其值对于List中的所有对象都是空的。

在此示例中,输出为&#34; Desc &#34;不使用for循环,循环对象并保持标志?

2 个答案:

答案 0 :(得分:2)

您可以使用Type.GetProperties方法迭代该类型的属性,然后使用LINQ All方法和PropertyInfo.GetValue方法检查列表中所有项目中的属性值是否为null :

list<Entity> entities = ...;
foreach(PropertyInfo propertyInfo in typeof(Entity).GetProperties())
{
    if(entities.All(entity => propertyInfo.GetValue(entity) == null))
    {
        Console.WriteLine("{0} property is null in all of the items in the list", propertyInfo.Name);
    }
}

答案 1 :(得分:2)

使用LINQ:

var Properties = typeof(Entity).GetProperties()
                 .Where(propertyInfo => ent.All(entity => propertyInfo.GetValue(entity, null) == null))
                 .Select(c=>c.Name);

PropertiesIEnumerable String IEnumerable Properties Name的{​​{1}}他们的价值观每个对象都为null。