Automapper 8-表达式树lambda不得包含空传播运算符

时间:2019-01-04 09:36:19

标签: automapper automapper-8

Automapper版本8.0.0从ResolveUsing中删除了IMappingExpression扩展方法,并将其与MapFrom扩展方法合并。但是,在用ResolveUsing方法替换MapFrom之后,某些配置会引发异常。

原始ResolveUsing

CreateMap<SourceType, DestinationType>()
    .ForMember(dest => dest.Customer,
        opt => opt.ResolveUsing(src => src?.Customer ?? new Customer())
    );

替换为MapFrom

CreateMap<SourceType, DestinationType>()
    .ForMember(dest => dest.Customer,
        opt => opt.MapFrom(src => src?.Customer ?? new Customer())
    );

这会产生编译错误:

  

错误CS8072

     

Automapper

     

表达式树lambda不得包含空传播运算符。

1 个答案:

答案 0 :(得分:4)

与旧的/已删除的Func重载相比,Automapper 8.0.0中新的基于ResolveUsing的重载接受更多的参数。

在替换opt.MapFrom(src => ...)时,与其在单个输入参数ResolveUsing中使用lambda表达式,不如在opt.MapFrom((src, dest) => ...)中使用2个参数的重载。

MapFrom表达式变为:

opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())

完整示例:

CreateMap<SourceType, DestinationType>()
    .ForMember(dest => dest.Customer,
        opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())
    );