据我了解这个问题,OP 不想克隆person2进入一个新实例Person,但询问如何复制内容person2进入一个已经存在的实例 (person1) of Person。 AutoMapper 的 Mapper.Map 方法的重载可以为您执行此操作:
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
//This copies member content from person2 into the _existing_ person1 instance.
Note 1:@alexl 的回答创建了一个new的实例Person。如果您有对该实例的其他引用person1指出,如果您重定向这些将不会获得(大概)所需的数据更新person1变量到一个新实例。
Note 2:您需要注意(递归)复制深度取决于 AutoMapper 在映射时了解的映射!
如果该组织的成员Person班级就是班级Brain而且你还做了Mapper.CreateMap<Brain, Brain>();
复制数据之前Mapper.Map<Person, Person>(person2, person1);
打电话,然后person1将保持当前状态Brain实例但是这个Brain将收到以下成员值person2's Brain实例。那就是你有一个深拷贝.
但如果 AutoMapper 在复制之前没有 Brain-Brain 映射,那么person1's Brain成员将引用相同的内容Brain实例作为一个person2参考。那就是你会得到一个浅拷贝.
这会递归地应用于所有成员,因此您最好确保 AutoMapper 具有您想要深复制的成员类的映射,并且没有您想要浅复制的成员类的映射。
使用 AutoMapper 的替代方法是使用使用反射的方法。 (请注意,链接中的代码执行了shallow copy!)
"Support for filling an existing object, instead of AutoMapper creating the destination object itself" was added in AutoMapper version 0.2.