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