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



我有一个具有许多属性的对象。我创建了这些对象的列表,并通过查找重要属性为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())));

但是我没有把它弄得很好,不能把它们放在一起。

检查对象中的任何属性是否为空?

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

因此将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))));
工作示例

相关内容

  • 没有找到相关文章

最新更新