AutoMapper:MapFrom 和 ResolveUsing 之间有什么区别?

2024-01-30

忽略ResolveUsing采用 IValueResolver 的重载,并且仅查看这 2 个方法:

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));

那么上述两种选择最终有什么区别呢?一个比另一个快吗?其中一个选择是否比另一个更好?如果是,何时/为什么?


过去我有一个邮件列表上的长电子邮件交换 https://groups.google.com/forum/#!topic/automapper-users/zx9pd18vcVQ与 Automapper 的作者一起。 MapFrom 将通过表达式全程进行 null 检查:

所以你可以做opt => opt.MapFrom(src => src.SomeProp.Way.Down.Here.Somewhere)每个级别都会受到检查 对于空值(就像它已经对于展平所做的那样)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoMapper:MapFrom 和 ResolveUsing 之间有什么区别? 的相关文章

随机推荐