4

我想通过具有输出参数的 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 添加方法与编译器生成的方法相同吗?

4

1 回答 1

5

我认为类型必须通过引用:(int32&ref int在 C# 语法中)

ByReferenceType typeInt32ByRef = new ByReferenceType(typeInt32);
method.Parameters.Add(
    new ParameterDefinition(typeInt32ByRef) { Name = "a", IsOut = true });
于 2013-01-27T22:12:26.593 回答