如何获取派生类型传递的 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> 根据需要。