我有一个具有许多属性的对象。我创建了这些对象的列表,并通过查找重要属性为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())));
但是我并没有把它放得足够好以便把它们放在一起。请让我直截了当。
答案 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))));