Je remplace actuellement le setter d'une classe donnée par Reflection.Emit. Tout fonctionne bien sauf quand je l'utilise avec une propriété annulable ....Une opération peut déstabiliser l'exécution lors de l'émission d'un setter à taille nulle
est le code que j'utiliser ici:
ilSetterGen.Emit(OpCodes.Ldarg_0);
ilSetterGen.Emit(OpCodes.Call, baseGetter);
ilSetterGen.Emit(OpCodes.Ldarg_1);
ilSetterGen.Emit(OpCodes.Ceq);
Label retLabel = ilSetterGen.DefineLabel();
ilSetterGen.Emit(OpCodes.Brtrue_S, retLabel);
ilSetterGen.MarkLabel(retLabel);
ilSetterGen.Emit(OpCodes.Ret);
Avez-vous une idée?
EDIT: comme indiqué dans la réponse que le problème est dans le test d'égalité ... Je donc retiré la partie de irrelevants ...
C'est exactement ce que j'ai trouvé il y a 5 minutes :) Maintenant, je cherche à savoir comment tester l'égalité de deux valeurs ... –
@ Jmix90 - vous pouvez coder en dur quelques-unes qui utilisent "ceq", else op_Equality ou .Equals. Vous pouvez probablement emprunter mon propre code si vous le voulez (de protobuf-net v2 qui émet beaucoup); Je ne suis toujours pas sur un PC mais je peux citer les fichiers plus tard si vous voulez. –