首页 > 解决方案 > 使用反射从 C# 中嵌套类型的 DeclaringType 获取泛型类型

问题描述

假设我有以下类结构:

public class Outer<T>
{
    public class Inner<U>
    {
    }
}

还有一些代码:

var testType = typeof(Outer<string>.Inner<int>);

如何从变量中获取构造的泛型类型typeof(Outer<string>)或泛型的值?typeof(string)testType

标签: c#.netreflection

解决方案


有趣 - 似乎外部类型的泛型参数被投射到内部类型:

var testType = typeof(Outer<string>.Inner<int>);              
var outerType = testType.DeclaringType;                       
var outerTypeGenericParam = outerType.GetGenericArguments();
var testTypeGenericParam = testType.GetGenericArguments();
Console.WriteLine(outerType);                                 // Test+Outer`1[T] 
Console.WriteLine(outerTypeGenericParam[0]);                  // T
Console.WriteLine(testTypeGenericParam[0]);                   // System.String
Console.WriteLine(testTypeGenericParam[1]);                   // System.Int32

所以在你的情况下,单线将是:

testType.GetGenericArguments()[0]

推荐阅读