Mono.Cecil如何定义输出参数

时间:2013-01-27 17:25:06

标签: .net il 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代码。他们是不同的。

Cecil补充说:

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

编译器生成:

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

请有人知道如何使我的Cecil添加方法与编译器生成相同吗?

1 个答案:

答案 0 :(得分:5)

我认为类型必须是引用:int32&(或C#语法中的ref int

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