使用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;
}
}
}
答案 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
。