Я пытаюсь воспроизвести следующий IL с помощью Mono.Cecil:Как создать тип возврата GenericParameter для метода Method в Mono.Cecil?
call !!0 [mscorlib]System.Threading.Interlocked::CompareExchange<class [System]System.ComponentModel.PropertyChangedEventHandler>(!!0&, !!0, !!0)
Когда я использую Mono.Cecil, чтобы осмотреть этот IL, я вижу, что операнд команды является GenericInstanceMethod, который держит ElementMethod типа MethodReference. Этот методReference, в свою очередь, имеет тип возвращаемого типа GenericParameter.
Я хотел бы создать те же объекты вручную, но, похоже, поймать-22. Чтобы создать GenericParameter, мне нужен IGenericParameterOwner, который, по-видимому, является тем же самым методом MethodReference выше. Поэтому я хотел бы передать MethodReference в конструктор GenericParameter. Однако я не могу создать MethodReference без TypeReference для возвращаемого типа, который, как я полагаю, должен быть GenericParameter.
Как это разрешить? Что я недопонимаю?
А, значит, вы имеете в виду, что я мог бы сделать что-то подобное? 'var elementMethodRef = new MethodReference (" CompareExchange ", _voidTypeRef); var genParam = новый GenericParameter ("!! 0", elementMethodRef); elementMethodRef.ReturnType = genParam; ' – Einar
@Einar yes, а затем elementMethodRef.GenericParameters.Add (genParam); –
Замечательно, это был недостающий кусок! Благодаря! – Einar