从反射属性中检索反射类型中的值

Posted

技术标签:

【中文标题】从反射属性中检索反射类型中的值【英文标题】:Retrieving values in reflected types from reflected properties 【发布时间】:2010-09-17 02:03:18 【问题描述】:

我需要访问在第三方程序集中声明的一些标记为内部的成员。

我想从类中的特定内部属性返回一个值。然后我想从该返回值的属性中检索一个值。但是,这些属性返回的类型也是内部的并在此第三方程序集中声明。

我见过的这样做的例子很简单,只显示返回 int 或 bool。有人可以提供一些示例代码来处理这种更复杂的情况吗?

【问题讨论】:

【参考方案1】:

您只需继续挖掘返回的值(或 PropertyInfo 的 PropertyType):

sing System;
using System.Reflection;
public class Foo

    public Foo() Bar = new Bar  Name = "abc";
    internal Bar Bar get;set;

public class Bar

    internal string Name get;set;

static class Program

    static void Main()
    
        object foo = new Foo();
        PropertyInfo prop = foo.GetType().GetProperty(
            "Bar", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        object bar = prop.GetValue(foo, null);
        prop = bar.GetType().GetProperty(
            "Name", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        object name = prop.GetValue(bar, null);

        Console.WriteLine(name);
    

【讨论】:

【参考方案2】:

您始终可以将其作为对象检索,并在返回的类型上使用反射来调用其方法并访问其属性。

【讨论】:

以上是关于从反射属性中检索反射类型中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何反射取得一个对象中所有字段的值

反射学习3-通过反射机制修改类中的私有属性的值

使用反射检索数组中的特定元素

反射以及内置方法

使用反射检测属性的访问修饰符类型

27反射类的内置方法