说我有这样的课程:
public class Test {
public class InnerTest{}
}
现在TypeInfo
有InnerTest
个对象。如何从TypeInfo
找到InnerTest
测试对象?
另一种方法很简单,我可以使用GetNestedTypes()
,但我找不到方法或属性(IsNestedType
除外)来找出嵌套类的包含类。
答案 0 :(得分:32)
您可以通过检索属性“DeclaringType”来获取此信息。
引用MSDN:
表示封闭类型的Type对象(如果当前类型是嵌套类型);或者泛型类型定义,如果当前类型是泛型类型的类型参数;或者声明泛型方法的类型,如果当前类型是泛型方法的类型参数;否则,null。
http://msdn.microsoft.com/en-us/library/system.type.declaringtype.aspx
答案 1 :(得分:5)
听起来你正在寻找Type.DeclaringType
财产。
答案 2 :(得分:0)
除上述之外,我想补充一点,如果涉及泛型类型,它会变得有点复杂,因为泛型类型参数是在内部实例的类型上定义的,而不是 DeclaringType
。
考虑这个类:
internal class WithGenericArg<T>
{
private T _data;
public WithGenericArg(T data)
{
_data = data;
}
public class Internal
{
public int Foo()
{
return 0;
}
}
public class Internal2<T2>
{
public T2? _data2;
public Internal2(T2? data2)
{
_data2 = data2;
}
public T2? Foo2()
{
return _data2;
}
}
}
查看 Inner
的类型时,其 IsGenericType
属性为 true 且 GetGenericArguments()
返回 1 个元素(以及 GenericTypeArguments
在类型关闭时返回 1 个元素) .这是外部(!)类的类型参数的类型参数(或具体类型)。
当查看 Inner2
的类型时,甚至有 2 个类型参数,一个用于外部类,一个用于内部类。