忽略采用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检查: