2

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

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

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

System.Action`1

不知何故,它失去了泛型参数,不再是 GenericInstanceType。

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

4

1 回答 1

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 的原始元素类型。

于 2011-05-16T11:06:38.420 回答