Я в настоящее время переопределяю сеттер данного класса с Reflection.Emit. Все работает отлично, за исключением, когда я использую его с обнуляемой собственностью ....Операция может дестабилизировать время выполнения при выпуске нулевого сеттера
Вот код я использую:
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);
У вас есть ключ?
EDIT:, как указано в ответе проблема заключается в тесте равенства ... Я так удалил irrelevants часть ...
Это то, что я нашел 5 мин. Назад :) Теперь я ищу, как проверить равенство двух значений ... –
@ Jmix90 - вы можете жестко закодировать несколько, которые используют «ceq», else op_Equality или .Equals. Вы, вероятно, можете взять мой код, если хотите (из protobuf-net v2, который много испускает); Я по-прежнему не на ПК, но я могу привести файлы позже, если вы захотите. –