Проблема Похоже, что условие игнорируется.Вот мой сценарий:
Исходный класс
public class Source
{
public IEnumerable<Enum1> Prop1{ get; set; }
public IEnumerable<Enum2> Prop2{ get; set; }
public IEnumerable<Enum3> Prop3{ get; set; }
}
Подкласс enums из байта и украшен [Flags].Целевой класс просто содержит свойства, такие как Enum1, Enum2 и Enum3, которые связаны с «побочным» побитовым значением.Таким образом, в сущности, если перечисление содержит 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));
});
Отображение работает нормально, когда внутреннийсвойства не равны NULL, и сопоставление успешно выполняется и правильно устанавливает пункт назначения.Тем не менее, я хочу пропустить сопоставление, когда значение источника элемента равно нулю (когда Prop1 равно нулю, тогда пропустить сопоставление).
Из отладки видно, что 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 является нулевым.
Любая помощь приветствуется.