我正在尝试使用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。

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

我该如何解决?我的误会是什么?

最佳答案

API本身似乎是一个问题。

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

07-28 10:02