使用反射在C#中从嵌套类型的DeclaringType获取通用类型

3

假设我有以下类结构:

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

还有一些代码:

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

我如何从变量 testType 中获取构造的泛型类型 typeof(Outer<string>),或者泛型 typeof(string) 的值?
1个回答

6

有趣 - 看起来外部类型的泛型参数被映射到内部类型:

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]

你是指 testType.GetGenericArguments()[0] 吗?testType.DeclaringType.GetGenericArguments()[0] 给我的是 typeof(T)。无论如何,发现得好 :) - Shane
@Shane。好的发现。已修复。 - D Stanley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接