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

Nen*_*nad 2 automapper automapper-8

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

原件ResolveUsing

CreateMap<SourceType, DestinationType>()
    .ForMember(dest => dest.Customer,
        opt => opt.ResolveUsing(src => src?.Customer ?? new Customer())
    );
Run Code Online (Sandbox Code Playgroud)

替换为MapFrom

CreateMap<SourceType, DestinationType>()
    .ForMember(dest => dest.Customer,
        opt => opt.MapFrom(src => src?.Customer ?? new Customer())
    );
Run Code Online (Sandbox Code Playgroud)

产生编译错误:

错误CS8072

自动映射器

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

Nen*_*nad 7

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

opt.MapFrom(src => ...)替换时ResolveUsing,不要使用带有单个输入参数的lambda表达式,而应使用带有2个参数的重载opt.MapFrom((src, dest) => ...)

MapFrom 表达式变为:

opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())
Run Code Online (Sandbox Code Playgroud)

完整示例:

CreateMap<SourceType, DestinationType>()
    .ForMember(dest => dest.Customer,
        opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())
    );
Run Code Online (Sandbox Code Playgroud)

  • 为此,有一个内置功能 NullSubstitute。 (2认同)