c# - 避免对单独的成员 Automapper 重复 coSTLy 方法调用

标签 c# automapper

谁能帮我避免这种情况,

CreateMap<Obj, ObjDTO>()
          .ForMember(d => d.Prop1, opt => opt.MapFrom(src => SomeMethod(src) == null ? null : SomeMethod(src).Prop1))
           .ForMember(d => d.Prop2, opt => opt.MapFrom(src => SomeMethod(src) == null? null : SomeMethod(src).Prop2));

此处 SomeMethod 需要为 2 个简单属性调用近 4 次。它甚至不支持安全导航运算符。

请分享您是如何摆脱这种情况的。

最佳答案

听起来您可以使用 AfterMap 操作:

CreateMap<Obj, ObjDTO>()
    .ForMember(...)
    .AfterMap((src, dest) => 
    {
        var foo = SomeMethod(src);
        if (foo == null)
        {
            return;
        }

        dest.Prop1 = foo.Prop1;
        dest.Prop2 = foo.Prop2; 
    });

但是需要这样做可能是因为您想在映射代码中做太多事情。最终,src 应该已经准备好进行映射,其 Prop1Prop2 属性存在并已分配。

或者您可以在 SomeMethod() 中使用内存,即对于每个输入您都记住输出,并在重复调用时返回后者。

关于c# - 避免对单独的成员 Automapper 重复 coSTLy 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872555/

相关文章:

c# - 如何更改 StorageFile 上的 DateCreated?

c# - 处理大型数据集和内存限制

c# - 使用 AutoMapper 从 POCO 映射到 NHibernate 代理对象时出错

c# - Automapper项目使用

c# - 自动映射器错误映射集合类型

C# 如何从字符串响应中删除转义引号

c# - ITypedList 替代品?

c# - 用c#在运行时设计 Crystal 报表

c# - 升级到 automapper 3 后缺少方法

collections - 是否可以将对象映射到 Automapper 中的列表?