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コードを比較します。それらは違う。

Cecil によって追加された鉱山:

.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 intC#構文で)

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