使用Mono.Cecil从ByReferenceType获取泛型参数

时间:2011-05-16 10:59:58

标签: c# .net cil il mono.cecil

我有一个获取参数的方法,如:

public void Foo(ref Action<string> bar);

使用Cecil枚举参数会产生ByReferenceType。调用GetElementType()以尝试取消引用该参数将返回一个带有fullname的TypeReference:

System.Action`1

它以某种方式丢失了泛型参数,不再是GenericInstanceType。

如何正确取消引用byref参数,并获取实际的通用实例类型?

1 个答案:

答案 0 :(得分:2)

您可以使用此功能深入了解TypeSpec(当然,当您知道自己所追求的内容时,可以缩短它):

ParameterDefinition parameter = ...;
ByReferenceType byref = (ByReferenceType) parameter.ParameterType;
GenericInstanceType action_string = (GenericInstanceType) byref.ElementType;
TypeReference action = action_string.ElementType;
TypeReference str = action_string.GenericArguments [0];

GetElementType方法返回构造TypeSpec的原始元素类型。