忽略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(使用前将#替换为@)