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

标签 automapper automapper-2

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

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

最佳答案

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

So you can do opt => opt.MapFrom(src => src.SomeProp.Way.Down.Here.Somewhere) and each level will get checked for nulls (as it already does for flattening).

关于AutoMapper:MapFrom 和 ResolveUsing 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14875075/

相关文章:

c# - 使用 Automapper 导致堆栈溢出的循环引用

AutoMapper 复杂对象映射 - 映射列表

c# - 使用 AutoMapper 将对象的属性映射到字符串

angular - 如何在客户端映射对象(DTO)?

Automapper 将源列表项附加到目标列表

Automapper 从包含对象列表的源到目标的映射

c# - 如何在构造函数中使用 AutoMapper 映射到 "this"

c# - 除了 AutoMapper 中的 ForMember 方法之外,是否还有其他自定义映射方法?

c# - 使用 AutoMapper 映射 "LinkedList"

c# - 避免构造函数映射字段