【问题标题】:Getting generic type from the DeclaringType of a nested type in C# with reflection使用反射从 C# 中嵌套类型的 DeclaringType 获取泛型类型
【发布时间】:2019-03-07 19:17:46
【问题描述】:

假设我有以下类结构:

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

还有一些代码:

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

如何从testType 变量中获取构造的泛型类型typeof(Outer&lt;string&gt;) 或泛型typeof(string) 的值?

【问题讨论】:

    标签: c# .net reflection


    【解决方案1】:

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

    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。接得好。固定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2010-12-20
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多