Как создать тип возвращаемого значения GenericParameter для MethodReference в Mono.Cecil? - PullRequest
4 голосов
/ 25 февраля 2012

Я пытаюсь воспроизвести следующий IL с помощью Mono.Cecil:

call !!0 [mscorlib]System.Threading.Interlocked::CompareExchange<class [System]System.ComponentModel.PropertyChangedEventHandler>(!!0&, !!0, !!0)

Когда я использую Mono.Cecil для проверки этого IL, я вижу, что операндом инструкции является GenericInstanceMethod, которыйсодержит ElementMethod типа MethodReference.Эта MethodReference, в свою очередь, имеет тип возвращаемого значения типа GenericParameter.

Я бы хотел создать те же объекты вручную, но, похоже, достигнуть ловушки-22.Чтобы создать GenericParameter, мне нужен IGenericParameterOwner, который, похоже, является тем же MethodReference, что и выше.Поэтому я хотел бы передать MethodReference конструктору GenericParameter.Однако я не могу создать MethodReference без TypeReference для возвращаемого типа, который, как я полагаю, должен быть GenericParameter.

Как мне решить эту проблему?Что я недопонимаю?

1 Ответ

4 голосов
/ 25 февраля 2012

Это похоже на проблему с API как есть.

Простой способ обойти это - передать TypeReference в void как ReturnType вашего MethodReference и изменить ReturnType на созданный позже GenericParameter.

...