我有一个类:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
我有两个 Person 实例(person1 和 person2)。我想将 person2 的内容复制到 person1。我想在一条指令中制作此副本,不是逐个属性:
person1.LastName = person2.LastName;
在文档中,我看到将一个对象复制到另一个对象,但类型不同。如何在类型相同时复制对象?
最佳答案
据我了解,OP 不想将 person2 克隆到 Person 的新实例中,而是询问如何复制 的内容person2 到Person 的已经存在的实例 (person1)。 AutoMapper 的 Mapper.Map 方法有一个重载可以为您执行此操作:
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
//This copies member content from person2 into the _existing_ person1 instance.
注意 1:@alexl 的回答创建了 Person 的新实例。如果您对 person1 指向的实例有其他引用,如果您将 person1 变量重定向到新实例,这些将不会获得(大概)所需的数据更新。
注意 2:您需要注意(递归)复制深度取决于 AutoMapper 在映射时所了解的映射!
如果 Person 类的成员是类 Brain 并且您还完成了 Mapper.CreateMap<Brain, Brain>();
复制数据前Mapper.Map<Person, Person>(person2, person1);
调用,然后 person1 将保留其当前 Brain 实例,但此 Brain 将接收 person2 的成员值大脑 实例。那就是你有一个深拷贝。
但是,如果 AutoMapper 在复制之前没有 Brain-Brain 映射,则 person1 的 Brain 成员将引用相同的 Brain 实例person2 引用。那就是你会得到一个浅拷贝。
这递归地应用于所有成员,因此您最好确保 AutoMapper 具有您想要深复制的成员类的映射,并且没有您想要浅复制的成员类的映射。
使用 AutoMapper 的替代方法是使用 an approach using reflection . (请注意,链接中的代码进行了浅复制!)
“支持填充现有对象,而不是 AutoMapper 自己创建目标对象”是 added in AutoMapper version 0.2 .
关于c# - 将对象复制到对象(使用 Automapper?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5713556/