Emitir variable local y asignarle un valor.

Estoy inicializando una variable entera como esta:

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

¿Cómo puedo acceder y asignarle un valor? Quiero hacer algo como esto:

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

Use los Ldloc Stloc Ldloc y Stloc para leer y escribir variables locales:

 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. 

Tenga en cuenta que el comstackdor de C # usa la forma abreviada de algunos de los códigos de operación (a través de .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