忽略采用IValueResolver的ResolveUsing重载,仅查看以下两种方法:

void ResolveUsing(Func<TSource, object> resolver);
void MapFrom<TMember>(Expression<Func<TSource, TMember>> sourceMember);

这两个之间的主要区别似乎是ResolveUsing接受了Func<TSource, object>,而MapFrom接受了Expression<Func<TSource, TMember>>

但是,在实际上使用以下方法之一和lambda表达式的客户端代码中,它们似乎是可互换的:

Mapper.CreateMap<SourceType, DestType>() // uses ResolveUsing
   .ForMember(d => d.DestPropX, o => o.ResolveUsing(s => s.SourcePropY));

Mapper.CreateMap<SourceType, DestType>() // uses MapFrom
   .ForMember(d => d.DestPropX, o => o.MapFrom(s => s.SourcePropY));

那么,以上两种选择之间的最终区别是什么?一个比另一个快吗?一个是比另一个更好的选择,如果是,何时/为什么?

最佳答案

过去,我与Automapper的作者有一个long email exchange on the mailing list。 MapFrom将通过表达式一直执行null检查:

07-27 22:55