我正在像这样初始化一个整数变量:

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

如何访问它并为其分配值?我想做这样的事情:
int a, b;
a = 5;
b = 6;
return a + b;

最佳答案

使用LdlocStloc操作码来读取和写入局部变量:

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

10-08 19:37