使用PropertyInfo.GetValue方法时,我需要检索对象列表。 我不知道它将是什么类型的列表。我的代码如下所示:
public IEnumerable<Error> FindErrors(object obj)
{
var errors = new List<Error>();
errors.AddRange(Validate(obj));
List<PropertyInfo> properties = obj.GetType().GetProperties().Where(p => !p.PropertyType.IsByRef).ToList();
foreach (var p in properties)
{
if (IsList(p))
{
// This line is incorrect? What is the syntax to get this to be correcT?????
List<object> objects = p.GetValue(obj, null);
foreach (object o in objects)
{
errors.AddRange(FindErrors(o));
}
}
else
{
errors.AddRange(FindErrors(p.GetValue(obj, null)));
}
}
return errors;
}
我的问题是我不确定获取该List的语法是什么,因为该行代码当前不正确。我如何获得对象列表?
答案 0 :(得分:3)
每个List<T>
都不是List<object>
。您应该检查该类型是否实现非泛型 IList
并改为使用它:
var objects = p.GetValue(obj, null) as IList;
if(objects != null) {...}
您可以在foreach
IList
等