5

我正在尝试使用 Mono.Cecil 重现以下 IL:

call !!0 [mscorlib]System.Threading.Interlocked::CompareExchange<class [System]System.ComponentModel.PropertyChangedEventHandler>(!!0&, !!0, !!0)

当我使用 Mono.Cecil 检查这个 IL 时,我看到指令的操作数是一个 GenericInstanceMethod,它包含一个 MethodReference 类型的 ElementMethod。此 MethodReference 又具有 GenericParameter 类型的返回类型。

我想手动创建相同的对象,但似乎达到了 catch-22。要创建一个 GenericParameter,我需要一个 IGenericParameterOwner,它似乎与上面的 MethodReference 完全相同。所以我想将 MethodReference 传递给 GenericParameter 构造函数。但是,如果没有返回类型的 TypeReference,我也无法创建 MethodReference,我认为它应该是 GenericParameter。

我该如何解决这个问题?我有什么误解?

4

1 回答 1

5

这似乎是 API 的一个问题。

解决此问题的一种简单方法是将 TypeReference 作为 MethodReference 的 ReturnType 传递给 void,并将 ReturnType 更改为稍后创建的 GenericParameter。

于 2012-02-25T01:10:40.393 回答