Emettre une variable locale et lui atsortingbuer une valeur

J’initialise une variable entière comme ceci:

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

Comment puis-je y accéder et lui atsortingbuer une valeur? Je veux faire quelque chose comme ça:

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

Utilisez les opcodes Ldloc et Stloc pour lire et écrire des 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. 

Notez que le compilateur C # utilise la forme abrégée de certains des opcodes (via .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