Mono.Cecil Как определить выходной параметр

Я хочу добавить новый метод через Mono.Cecil, который имеет выходной параметр, например:

private static bool XXXXX(out Int32 a)

Я пробовал следующие коды, чтобы добавить этот параметр

TypeReference typeInt32 = targetAssembly.MainModule.TypeSystem.Int32.Resolve();
typeInt32 = targetAssembly.MainModule.Import(typeInt32);
method.Parameters.Add(new ParameterDefinition(typeInt32) { Name = "a", IsOut = true });

И я сравниваю коды IL между тем, который я добавил, и тем, который генерирует компилятор. они разные.

Моя добавлена ​​Сесилом:

.method private hidebysig static bool XXXXX([out] int32 a) cil managed

Компилятор генерирует:

.method private hidebysig static bool XXXXX([out] int32& a) cil managed

Пожалуйста, кто-нибудь знает, как сделать мой добавленный метод Cecil таким же, как генерирует компилятор?


person Mr.Wang from Next Door    schedule 27.01.2013    source источник


Ответы (1)


Я думаю, что тип должен быть по ссылке: int32& (или ref int в синтаксисе C#)

ByReferenceType typeInt32ByRef = new ByReferenceType(typeInt32);
method.Parameters.Add(
    new ParameterDefinition(typeInt32ByRef) { Name = "a", IsOut = true });
person svick    schedule 27.01.2013