如何从列表中删除任何对象属性为null或为空?

时间:2014-06-17 16:49:43

标签: c# linq list reflection

我有一个具有许多属性的对象。我创建了这些对象的列表,并通过查找重要属性为null或为空的情况来清除坏对象。像...

theList.RemoveAll(p => string.IsNullOrEmpty(p.ID));

如何进行类似的检查,而不是检查单个属性,检查对象IsNullOrEmpty中是否有任何属性?

我一直在与Reflection合作以获得类似

的内容
object x = typeof(MyObject).GetProperties().
    Select(p => p.GetValue(exampleObject, null)).
    Where(v => string.IsNullOrEmpty(v.ToString())));

但是我并没有把它放得足够好以便把它们放在一起。请让我直截了当。

2 个答案:

答案 0 :(得分:5)

  

检查对象IsNullOrEmpty中是否有任何属性?

theList.RemoveAll(x => x.GetType().GetProperties()
                                  .Select(p => p.GetValue(x, null))
                                  .Any(p => p == null));

答案 1 :(得分:1)

因此,仅将String.IsNullOrEmpty应用于字符串值是有意义的,您应该只选择字符串类型的属性:

List<MyObject> objects = new List<MyObject>();
// fill list

var stringProperties = typeof(MyObject)
        .GetProperties()
        .Where(p => p.PropertyType == typeof(string))
        .ToArray();

然后得到过滤的对象序列:

var query = objects.Where(o =>
    stringProperties.All(p => !String.IsNullOrEmpty((string)p.GetValue(o))));

您可以使用相同的方法从列表中删除对象:

objects.RemoveAll(o => 
     stringProperties.Any(p => String.IsNullOrEmpty((string)p.GetValue(o))));

WORKING SAMPLE