12

私は次のような整数変数を初期化しています:

LocalBuilder a = ilGen.DeclareLocal(typeof(Int32));

どうすればそれにアクセスして値を割り当てることができますか?私はこのようなことをしたい:

int a, b;
a = 5;
b = 6;
return a + b;
4

1 に答える 1

32

Ldlocおよびオペコードを使用して、Stlocローカル変数の読み取りと書き込みを行います。

LocalBuilder a = ilGen.DeclareLocal(typeof(Int32));
LocalBuilder b = ilGen.DeclareLocal(typeof(Int32));
ilGen.Emit(OpCodes.Ldc_I4, 5); // Store "5" ...
ilGen.Emit(OpCodes.Stloc, a);  // ... in "a".
ilGen.Emit(OpCodes.Ldc_I4, 6); // Store "6" ...
ilGen.Emit(OpCodes.Stloc, b);  // ... in "b".
ilGen.Emit(OpCodes.Ldloc, a);  // Load "a" ...
ilGen.Emit(OpCodes.Ldloc, b);  // ... and "b".
ilGen.Emit(OpCodes.Add);       // Sum them ...
ilGen.Emit(OpCodes.Ret);       // ... and return the result.

C# コンパイラは、(.NET Reflector を介して) 一部のオペコードの省略形を使用することに注意してください。

.locals init (
    [0] int32 a,
    [1] int32 b)

ldc.i4.5 
stloc.0 
ldc.i4.6 
stloc.1 
ldloc.0 
ldloc.1 
add 
ret 
于 2013-03-07T18:34:49.553 に答える