私はMono.Cecilを使用して、次のILを再現しようとしている:Mono.CecilでMethodReferenceのGenericParameter戻り値の型を作成する方法は?
call !!0 [mscorlib]System.Threading.Interlocked::CompareExchange<class [System]System.ComponentModel.PropertyChangedEventHandler>(!!0&, !!0, !!0)
私はこのILを検査するMono.Cecilを使用する場合、私は命令のオペランドがElementMethodを保持しているGenericInstanceMethod、であることがわかりMethodReference型の。このMethodReferenceには、GenericParameter型の戻り値型があります。
同じオブジェクトを手動で作成したいと思っていますが、キャッチ22に達するようです。 GenericParameterを作成するには、上記のMethodReferenceと同じようなIGenericParameterOwnerが必要です。だから、MethodReferenceをGenericParameterコンストラクタに渡したいと思います。しかし、私は、GenericParameterでなければならないと仮定して、戻り値の型のTypeReferenceを持たないMethodReferenceを作成することはできません。
どうすれば解決できますか?私は何を誤解していますか?
ああ、このようなことができますか? 'var elementMethodRef = new MethodReference(" CompareExchange "、_voidTypeRef); var genParam = new GenericParameter( "!! 0"、elementMethodRef); elementMethodRef.ReturnType = genParam; ' – Einar
@Einarはい、次にelementMethodRef.GenericParameters.Add(genParam); –
素敵な、それは欠けている部分だった!ありがとう! – Einar