如何获取派生类型传递的 Mono Cecil 中基类型的类型参数?
How to get type argument of base type in Mono Cecil as passed by derived type?
考虑这个层次结构:
class StrDict<T> : Dictionary<string, T>
class MyDictionary : StrDict<double>
我想使用 Mono Cecil 获取类型 double
以替换基本类型名称中的 T
。理想情况下,我想直接获取 StrDict
`1<double>
而无需解决方法。
我试过了:
var baseTypeDef = ((GenericInstanceType) myDictTypeRef.BaseType).ElementType.Resolve();
var typeParamName = baseTypeDef.GenericParameters.First().FullName
但它返回了 T
,而不是 double
。
我设法使用以下代码 (reference) 解决了这个问题:
var genericBaseType = (GenericInstanceType) myDictTypeRef.BaseType;
var genericArgs = genericBaseType .GenericArguments;
var fullBaseTypedName = genericBaseType.ElementType.MakeGenericInstanceType(genericArgs.ToArray()).FullName
其中 returns StrDict
`1<double>
根据需要。
考虑这个层次结构:
class StrDict<T> : Dictionary<string, T>
class MyDictionary : StrDict<double>
我想使用 Mono Cecil 获取类型 double
以替换基本类型名称中的 T
。理想情况下,我想直接获取 StrDict
`1<double>
而无需解决方法。
我试过了:
var baseTypeDef = ((GenericInstanceType) myDictTypeRef.BaseType).ElementType.Resolve();
var typeParamName = baseTypeDef.GenericParameters.First().FullName
但它返回了 T
,而不是 double
。
我设法使用以下代码 (reference) 解决了这个问题:
var genericBaseType = (GenericInstanceType) myDictTypeRef.BaseType;
var genericArgs = genericBaseType .GenericArguments;
var fullBaseTypedName = genericBaseType.ElementType.MakeGenericInstanceType(genericArgs.ToArray()).FullName
其中 returns StrDict
`1<double>
根据需要。