将项目添加到新集合而不是替换整个集合

1 c# automapper

我正在使用Automapper,我想知道是否可以将源集合中的所有项目添加到目标.

考虑以下:

public class A { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }

public class B { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
Run Code Online (Sandbox Code Playgroud)

然后创建映射:

Mapper.CreateMap<A, B>();
Run Code Online (Sandbox Code Playgroud)

并进行实际映射:

Mapper.Map<A, B>(instanceOfA);
Run Code Online (Sandbox Code Playgroud)

我相信在屏幕后面会发生这种情况:

newInstanceOfB.myDictionary = instanceOfA.myDictionary
Run Code Online (Sandbox Code Playgroud)

但是有可能告诉Automapper这样做(可能是某个东西的自定义转换器......):

foreach (var item in instanceOfA.myDictionary)
    newInstanceOfB.myDictionary[item.Key] = item.Value
Run Code Online (Sandbox Code Playgroud)

boc*_*oca 7

这似乎对我有用

Mapper.CreateMap<A, B>()
     .ForMember(d => d.myDictionary, opt => opt.ResolveUsing(
                s => s.myDictionary.ToDictionary(pair => pair.Key, pair => pair.Value)));
Run Code Online (Sandbox Code Playgroud)

这是完整的样本

public class A { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
public class B { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }

class Program
{
    static void Main(string[] args)
    {
        var instanceOfA = new A
                              {
                                  myDictionary = new Dictionary<int, string>
                                                     {
                                                         {1, "a"},
                                                         {2, "b"}
                                                     }
                              };
        Mapper.CreateMap<A, B>()
            .ForMember(d => d.myDictionary, opt => opt.ResolveUsing(
              s => s.myDictionary.ToDictionary(pair => pair.Key, pair => pair.Value)));
        var instanceOfB = Mapper.Map<A, B>(instanceOfA);
        instanceOfA.myDictionary[1] = "c";

        if (instanceOfB.myDictionary[1] == "c")
            Console.WriteLine("Failed");
        else
            Console.WriteLine("Succeeded");
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

评论后编辑: *再次编辑*

Mapper.CreateMap<A, B>()
   .ForMember(d => d.myDictionary, opt => opt.Ignore())
   .AfterMap((s, d) =>
                      {
                       d.myDictionary.Clear();
                       s.myDictionary.ToList().ForEach(p => d.myDictionary.Add(p));
                   });
Run Code Online (Sandbox Code Playgroud)