假设我有这样的课程:
public class Test {
public class InnerTest{}
}
现在有一个TypeInfo
对象InnerTest
。如何从 中找出TypeInfo
Test 的对象InnerTest
?
另一种方法很简单,我可以只使用GetNestedTypes()
,但我找不到方法或属性(除了IsNestedType
)来找出嵌套类的包含类。
假设我有这样的课程:
public class Test {
public class InnerTest{}
}
现在有一个TypeInfo
对象InnerTest
。如何从 中找出TypeInfo
Test 的对象InnerTest
?
另一种方法很简单,我可以只使用GetNestedTypes()
,但我找不到方法或属性(除了IsNestedType
)来找出嵌套类的包含类。
您可以通过检索属性“DeclaringType”来获得它。
引用 MSDN:
如果当前类型是嵌套类型,则表示封闭类型的 Type 对象;或泛型类型定义,如果当前类型是泛型类型的类型参数;或声明泛型方法的类型,如果当前类型是泛型方法的类型参数;否则为空。
http://msdn.microsoft.com/en-us/library/system.type.declaringtype.aspx
听起来你正在寻找Type.DeclaringType
财产。
除了上述之外,我想补充一点,如果涉及泛型类型,它会变得有点复杂,因为泛型类型参数是在内部实例的 Type 上定义的,而不是在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 个类型参数,一个用于外部类,一个用于内部类。