如何在派生类型传递的Mono Cecil中获取基类型的类型参数?

时间:2017-08-03 15:28:39

标签: mono mono.cecil

考虑这个层次结构:

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

1 个答案:

答案 0 :(得分:0)

我设法使用以下代码(reference)解决了这个问题:

var genericBaseType = (GenericInstanceType) myDictTypeRef.BaseType;
var genericArgs = genericBaseType .GenericArguments;
var fullBaseTypedName = genericBaseType.ElementType.MakeGenericInstanceType(genericArgs.ToArray()).FullName

根据需要返回StrDict`1 <double>