【问题标题】:How to get type argument of base type in Mono Cecil as passed by derived type?如何在派生类型传递的 Mono Cecil 中获取基类型的类型参数?
【发布时间】:2017-08-04 04:57:36
【问题描述】:

考虑这个层次结构:

class StrDict<T> : Dictionary<string, T> 
class MyDictionary : StrDict<double>

我想使用 Mono Cecil 获取类型 double 来替换基本类型名称中的 T。理想情况下,我想直接获得StrDict`1&lt;double&gt; 而无需解决方法。

我试过了:

var baseTypeDef = ((GenericInstanceType) myDictTypeRef.BaseType).ElementType.Resolve();
var typeParamName = baseTypeDef.GenericParameters.First().FullName

但它返回的是T,而不是double

【问题讨论】:

    标签: mono mono.cecil


    【解决方案1】:

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

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

    根据需要返回StrDict`1&lt;double&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多