私は次のような整数変数を初期化しています:
LocalBuilder a = ilGen.DeclareLocal(typeof(Int32));
どうすればそれにアクセスして値を割り当てることができますか?私はこのようなことをしたい:
int a, b;
a = 5;
b = 6;
return a + b;
私は次のような整数変数を初期化しています:
LocalBuilder a = ilGen.DeclareLocal(typeof(Int32));
どうすればそれにアクセスして値を割り当てることができますか?私はこのようなことをしたい:
int a, b;
a = 5;
b = 6;
return a + b;
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