Ein*_*nar 5 .net il mono.cecil
我正在尝试使用 Mono.Cecil 重现以下 IL:
call !!0 [mscorlib]System.Threading.Interlocked::CompareExchange<class [System]System.ComponentModel.PropertyChangedEventHandler>(!!0&, !!0, !!0)
Run Code Online (Sandbox Code Playgroud)
当我使用 Mono.Cecil 检查这个 IL 时,我看到指令的操作数是一个 GenericInstanceMethod,它包含一个 MethodReference 类型的 ElementMethod。此 MethodReference 又具有 GenericParameter 类型的返回类型。
我想手动创建相同的对象,但似乎达到了 catch-22。要创建 GenericParameter,我需要一个 IGenericParameterOwner,它似乎与上面的 MethodReference 完全相同。所以我想将 MethodReference 传递给 GenericParameter 构造函数。但是,如果没有返回类型的 TypeReference,我也无法创建 MethodReference,我认为它应该是 GenericParameter。
我该如何解决?我误解了什么?
这似乎是 API 的问题。
解决此问题的一种简单方法是将 TypeReference 作为 MethodReference 的 ReturnType 传递给 void,并将 ReturnType 更改为后来创建的 GenericParameter。