Я использую Autopper для обновления свойств объекта; «объединение» двух объектов, но только если исходный член имеет значение! = null. (Согласно этот вопрос )
Видимо, он не работает с Enums. После вызова метода MergeObject он сопоставляется со значением по умолчанию перечисления (Pendente
), а не игнорирует его и оставляет пункт назначения таким, какой он есть.
Работает нормально для nullable int, например.
При отладке, если я установлю точку останова для условия (=> member != null
), он покажет member = Pendente
, даже если Source.Situacao
равно нулю.
Нажав F10, вы переходите к следующему члену, но вы можете видеть, что оно изменило destination.Situacao
значение.
Мне кажется, что это ошибка, но моя проблема была закрыта. Какие-нибудь мысли?
public class FooViewModel
{
public Guid Id { get; set; }
public Status? Situacao { get; set; }
}
public class FooModel
{
public Guid Id { get; set; }
public Status Situacao { get; set; }
}
public enum Status
{
Pendente,
EmProcessamento,
Processada
}
private static void Initialize()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<FooViewModel, FooModel>()
.ForAllMembers(o => o.Condition((source, destination, member) => member != null));
});
}
public static void MergeObject(FooViewModel source, FooModel destination)
{
Mapper.Map(source, destination);
}
EDIT1:
Моя цель - в основном реализовать функциональность, описанную в здесь , но я не вижу свойства IsSourceValueNull
.
EDIT2:
Мне удалось достичь своей цели, используя следующую строку, но я должен был указать член явно. Есть ли общий способ применить это ко всем участникам?
cfg.CreateMap<FooViewModel, Foo>()
.ForMember(dest => dest.Situacao, opt => opt.MapFrom((source, dest) => source.Situacao ?? dest.Situacao));