使用反射返回Property.GetValue中的对象列表

时间:2018-04-23 15:26:01

标签: c# reflection

使用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的语法是什么,因为该行代码当前不正确。我如何获得对象列表?

1 个答案:

答案 0 :(得分:3)

每个List<T>都不是List<object>。您应该检查该类型是否实现非泛型 IList并改为使用它:

var objects = p.GetValue(obj, null) as IList;
if(objects != null) {...}

您可以在foreach

IList