c#反射-从PropertyInfo获取属性列表

c#反射-从PropertyInfo获取属性列表,c#,.net,reflection,C#,.net,Reflection,所以,正如标题所说,我有一个对象,它是propertyInfo。我想得到的是那笔财产,但我似乎找不到办法 首先我有这个方法: public object GetPropertyInfo(object parent, String propertyName) { object propInf = null; PropertyInfo[] propList = parent.GetType().GetProperties(); foreac

所以,正如标题所说,我有一个对象,它是propertyInfo。我想得到的是那笔财产,但我似乎找不到办法

首先我有这个方法:

public object GetPropertyInfo(object parent, String propertyName)
    {
        object propInf = null;

        PropertyInfo[] propList = parent.GetType().GetProperties();

        foreach (PropertyInfo pInf in propList)
        {
            if (propertyName == pInf.Name)
            {
                propInf = pInf;
            }
        }

        return propInf;
    }
假设提供的“parent”对象是一个常规类而不是反射类型,那么它工作得相当好

但返回的某些属性本身包含我要访问的属性。在这些情况下,我需要将PropertyInfo反馈回这个方法,并为属性获取另一个PropertyInfo。但是如果我在这个方法中放入一个PropertyInfo对象,它只会返回一个PropertyInfo的属性列表(正如您所想象的)

我已经读过了,似乎我想要的是PropertyInfo类的“GetValue”方法。不过我有点不确定,因为我似乎无法解析该方法所需的内容

尽管如此,我还是这样写的:

public object GetPropertyInfo(object parent, String propertyName)
    {
        object propInf = null;

        object o = null;

        if (parent is PropertyInfo)
        {
            PropertyInfo p = (parent as PropertyInfo);
            o = p.GetValue(p, null);
        }
        else
            o = parent;

        PropertyInfo[] propList = o.GetType().GetProperties();

        foreach (PropertyInfo pInf in propList)
        {
            if (propertyName == pInf.Name)
            {
                propInf = pInf;
            }
        }

        return propInf;
    }
显然,我希望第二个能起作用。它通过'if'语句fine,确认它是PropertyInfo类型,但下一部分提供了一个异常,如下所示:

TargetException:对象与目标类型不匹配


也许我在使用“GetValue”时犯了一个错误,因为我对它不太熟悉,但如果我可以在不指定类型的情况下使用它,那就太好了。

假设我理解您的意图:

表示类的属性,而不知道正在检查其属性的类的实例

方法可以为给定实例提供属性的值

object value = somePropertyInfo.GetValue(someInstance);
// where someInstance is of the type which has someProperty's represented property.

如果需要当前正在检查的属性的
类型的属性
,可以使用
PropertyInfo.PropertyType.GetProperties()
但这只会获取属性的
类型的属性,而不是它所包含的具体(可能是派生的)
类型的属性。

假设我理解您的意图:

表示类的属性,而不知道正在检查其属性的类的实例

方法可以为给定实例提供属性的值

object value = somePropertyInfo.GetValue(someInstance);
// where someInstance is of the type which has someProperty's represented property.

如果需要当前正在检查的属性的
类型的属性
,可以使用
PropertyInfo.PropertyType.GetProperties()
但这只会得到属性的
类型的属性,而不是它所包含的具体(可能是派生的)
类型的属性。

你在这方面帮了我很大的忙。非常感谢!你在这里帮了我不少忙。非常感谢!