我试图用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