我試圖用Mono.Cecil能重現以下IL:如何在Mono.Cecil中爲MethodReference創建GenericParameter返回類型?
call !!0 [mscorlib]System.Threading.Interlocked::CompareExchange<class [System]System.ComponentModel.PropertyChangedEventHandler>(!!0&, !!0, !!0)
當我使用Mono.Cecil能檢查這種IL,我看到指令的操作數是GenericInstanceMethod,其持有元方法類型的MethodReference。這個MethodReference又有一個GenericParameter類型的返回類型。
我想用手創建相同的對象,但是看起來達到了catch-22。要創建一個GenericParameter,我需要一個IGenericParameterOwner,它似乎與上面的MethodReference非常相似。所以我想將MethodReference傳遞給GenericParameter構造函數。然而,我不能創建沒有類型引用的返回類型的MethodReference,我認爲它應該是GenericParameter。
我該如何解決這個問題?我誤解了什麼?
啊,所以你的意思是我可以做這樣的事情? 'var elementMethodRef = new MethodReference(「CompareExchange」,_voidTypeRef); var genParam = new GenericParameter(「!! 0」,elementMethodRef); elementMethodRef.ReturnType = genParam;' – Einar 2012-02-25 20:07:20
@Einar yes,然後elementMethodRef.GenericParameters.Add(genParam); – 2012-02-25 21:28:58
太棒了,那是失蹤的一塊!謝謝! – Einar 2012-02-25 21:36:15