如何从嵌套类

时间:2017-08-02 10:51:34

标签: c# reflection

使用SuperClass1类型时,如何通过反射获取SubClass1的所有字段?

这是我到目前为止所拥有的:

namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            SuperClass1.SubClass1 class1 = new SuperClass1.SubClass1();
            PrintAllFields(class1);
        }

        public static void PrintAllFields(object obj)
        {
            var SuperClassType = obj.GetType();
            // How do I get the fields 'param1', 'param2', 'param3' from here?
            SuperClassType.GetFields();
        }
    }

    public class SuperClass1
    {
        public int param1;
        public int param2;
        public int param3;
        public class SubClass1
        {
            public int paramTest;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您正在寻找的是称为声明类型。

您可以查看以下链接以获取更多信息:MSDN, Declaring Type

您的代码可以写成:

public static void PrintAllFields(object obj)
{
    var nestedClassType = obj.GetType();
    var declaringClassType = nestedClassType.DeclaringType;

    if (declaringClassType != null)
    {
        var fields = declaringClassType.GetFields();
    }
}

请勿忘记检查是否确实存在声明类型,否则您declaringClassType将为空,最终会得到NullReferenceException