说我有以下类结构:

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


和一些代码:

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


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

最佳答案

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

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]

关于c# - 通过反射从C#中的嵌套类型的DeclaringType获取泛型类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55051292/

10-11 02:26