据我了解的问题,OP不想将person2克隆到Person的新实例中,而是在询问如何将person2的内容复制到Person的现有实例中(person1)。AutoMapper的Mapper.Map方法的重载可以为您完成此操作:
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
注1: @alexl的答案创建了Person的新实例。如果您对person1指向的实例有其他引用,那么如果将person1变量重定向到新实例,这些引用将不会(大概)获得所需的数据更新。
注意2:您需要注意,(递归)复制深度取决于AutoMapper在映射时知道的映射!
如果Person类的成员属于Brain类,并且您另外Mapper.CreateMap<Brain, Brain>();
在复制数据Mapper.Map<Person, Person>(person2, person1);
调用之前完成了操作,则person1将保留其当前Brain实例,但此Brain将接收person2的Brain实例的成员值。那是你的深复制。
但是,如果AutoMapper在复制之前没有Brain-Brain映射,则person1的Brain成员将引用与person2引用的同一Brain实例。那就是你会得到一个浅表副本。
这将递归地应用于所有成员,因此您最好确保AutoMapper具有要深度复制的成员类的映射,而没有要深度复制的成员类的映射。
使用AutoMapper的替代方法是使用使用反射的方法。(请注意,链接中的代码会进行浅表复制!)
在AutoMapper版本0.2中添加了“支持填充现有对象,而不是由AutoMapper自己创建目标对象” 。