考虑这个层次结构:
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
。
答案 0 :(得分:0)
我设法使用以下代码(reference)解决了这个问题:
var genericBaseType = (GenericInstanceType) myDictTypeRef.BaseType;
var genericArgs = genericBaseType .GenericArguments;
var fullBaseTypedName = genericBaseType.ElementType.MakeGenericInstanceType(genericArgs.ToArray()).FullName
根据需要返回StrDict
`1 <double>
。