Проблема Похоже, что условие игнорируется. Вот мой сценарий:
Исходный класс
public class Source
{
public IEnumerable<Enum1> Prop1{ get; set; }
public IEnumerable<Enum2> Prop2{ get; set; }
public IEnumerable<Enum3> Prop3{ get; set; }
}
Перечисления подкласса из байта и украшены [Флаги]. Класс назначения просто содержит такие свойства, как Enum1, Enum2 и Enum3, содержащие «общее» побитовое значение. Таким образом, по сути, если Enumeration содержит Enum1.value !, Enum1.Value2 и Enum1.Value3, пункт назначения будет содержать поразрядное значение Enum1.Value1 | Enum1.Value2 | Enum1.Value3
Класс назначения
public Enum1 Prop1 { get; set; }
public Enum2 Prop2 { get; set; }
public Enum3 Prop3 { get; set; }
Отображение AutoMapper
Mapper.CreateMap<Source, Destination>()
.ForMember(m => m.Prop1, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop1.Aggregate((current, next) => current | next));
})
.ForMember(m => m.Prop2, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop2.Aggregate((current, next) => current | next));
})
.ForMember(m => m.Prop3, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop3.Aggregate((current, next) => current | next));
});
Отображение работает нормально, когда внутренние свойства не равны нулю, а сопоставление выполнено успешно и правильно устанавливает назначение. Однако я хочу пропустить сопоставление, когда значение источника элемента равно нулю (когда Prop1 имеет значение null, пропустите сопоставление).
Во время отладки я вижу, что Source.Prop1 имеет значение null. Условие полностью игнорируется и возникает исключение, в котором говорится, что значение равно нулю.
Trying to map Source to Destination. Destination property: Prop1. Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. --> Value cannot be null. Parameter name: source
Я не уверен, проверяет ли IsSourceValueNull свойство Prop1 или фактический класс Source, который не является нулевым. Только член Prop1 имеет значение NULL.
Любая помощь приветствуется.