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