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

标签 c# .net reflection

所以,正如标题所说,我有一个对象,它是 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;
    }

假设提供的“父”对象是常规类而不是反射类型,它工作得相当好。

但是一些返回的属性本身包含我想要访问的属性。在这些情况下,我需要将 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”语句,确认它是 PropertyInfo 类型,但接下来的部分提供了一个异常,如下所示:

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

也许我在“GetValue”上犯了一个错误,因为我并不完全熟悉它,但如果我可以在不指定类型的情况下做到这一点,那就太好了。

最佳答案

假设我明白你想做什么:

PropertyInfo 表示 class属性 没有意识到 class实例正在检查其属性(property)

GetValue 但是,方法可以为您提供给定实例属性值。

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

如果您想要 Type属性您当前正在检查的属性(property)中,您可以使用PropertyInfo.PropertyType.GetProperties();但这只会让你得到 Type 的属性属性而不是具体(可能派生)Type它包含。

关于c# 反射 - 从 PropertyInfo 获取属性列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573953/

相关文章:

C# 模式匹配数组

c# - 如何在 Unity Android 应用程序中使用 OAuth 2.0 获取访问 token ?

c# - 如何在 dot net 的融合 kafka 中使消费方法成为非阻塞

使用企业库时 C# 非托管应用程序崩溃

c# - 如何创建动态类型 List<T>

c# - 如何从输出过程类中读取最后一行?

c# - 如何手动清除 ObjectDataSource 缓存

c# - Parallel.ForEach 和 ListView 控件

c# - 为什么开放泛型的基类型不开放?

java - 如何使用反射包从类路径创建对象