如何获取 SomeType<T1> 的 T 类型 [重复]

Posted

技术标签:

【中文标题】如何获取 SomeType<T1> 的 T 类型 [重复]【英文标题】:How to get type of T of SomeType<T1> [duplicate] 【发布时间】:2013-08-06 15:47:09 【问题描述】:

有这样的泛型:

SomeType<T>
SomeType<T1, T2>

并且只有它们的类型:

Type type1 = typeof(SomeType<T>);
Type type2 = typeof(SomeType<T1, T2>);

如何从type1获取T的类型 和T1T2 来自type2

示例: 使用typeof(SomeType&lt;int&gt;) 只会返回SomeType´1。 但我正在寻找一种获得int 类型的方法,就像typeof(int) 一样。

【问题讨论】:

Type.GetGenericArguments() ? ***.com/questions/557340/… 【参考方案1】:

您应该在Type 类上使用GetGenericArguments 方法,该方法将返回您用来指定开放泛型类型的特定类型。您的案例示例:

var type = typeof(SomeType<int, string>);

foreach(Type closedType in type.GetGenericArguments())

    Console.WriteLine(closedType);

在哪里

class SomeType<T1, T2> 

将打印:

System.Int32
System.String

【讨论】:

【参考方案2】:

取决于SomeType,但我建议这样:

Type innerType = type1.GetType().GetProperty("Item").PropertyType;

【讨论】:

我猜Item这个属性是指索引器。但是当SomeType&lt;T&gt; 没有实现索引器时,这是否有效?

以上是关于如何获取 SomeType<T1> 的 T 类型 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# 如何将 Expression<Func<SomeType>> 转换为 Expression<Func<OtherType>>

Observable<> 不可分配给类型 Observable<SomeType[]>

了解 listen: false 与 Provider<SomeType>.of(context, listen: false) 一起使用时的工作原理

如何在不获取“SomeType@2f92e0f4”的情况下打印我的 Java 对象?

PInvoke - 如何编组'SomeType * []'?

JS获取图片大小(长宽)问题