31

假设我有这样的课程:

public class Test {
    public class InnerTest{}
}

现在有一个TypeInfo对象InnerTest。如何从 中找出TypeInfoTest 的对象InnerTest

另一种方法很简单,我可以只使用GetNestedTypes(),但我找不到方法或属性(除了IsNestedType)来找出嵌套类的包含类。

4

3 回答 3

41

您可以通过检索属性“DeclaringType”来获得它。

引用 MSDN:

如果当前类型是嵌套类型,则表示封闭类型的 Type 对象;或泛型类型定义,如果当前类型是泛型类型的类型参数;或声明泛型方法的类型,如果当前类型是泛型方法的类型参数;否则为空。

http://msdn.microsoft.com/en-us/library/system.type.declaringtype.aspx

于 2012-07-30T14:59:29.903 回答
5

听起来你正在寻找Type.DeclaringType财产。

于 2012-07-30T15:00:37.083 回答
0

除了上述之外,我想补充一点,如果涉及泛型类型,它会变得有点复杂,因为泛型类型参数是在内部实例的 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 个类型参数,一个用于外部类,一个用于内部类。

于 2021-04-03T10:56:16.067 回答