c# - 将对象复制到对象(使用 Automapper?)

标签 c# automapper

我有一个类:

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 的新实例中,而是询问如何复制 的内容person2Person已经存在的实例 (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 映射,则 person1Brain 成员将引用相同的 Brain 实例person2 引用。那就是你会得到一个浅拷贝
这递归地应用于所有成员,因此您最好确保 AutoMapper 具有您想要深复制的成员类的映射,并且没有您想要浅复制的成员类的映射。

使用 AutoMapper 的替代方法是使用 an approach using reflection . (请注意,链接中的代码进行了复制!)

“支持填充现有对象,而不是 AutoMapper 自己创建目标对象”是 added in AutoMapper version 0.2 .

关于c# - 将对象复制到对象(使用 Automapper?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5713556/

相关文章:

c# - AutoMapper 自定义类型转换器 ITypeConverter 和映射嵌套对象

c# - 多语言枚举

c# - 从字符串中剥离 WordML

vb.net - Automapper:如何忽略 EF 中的导航属性 (VB.NET)

entity-framework - 如何使用 Automapper 来映射导航属性 View 模型

c# - AutoMapper DynamicMap 不工作

c# - 估计/计算 session 内存使用

c# - 在c# winform中选择DataGridView的一列值

c# - 选择在运行时保存文件的位置

c# - AutoMapperMappingException - 缺少类型映射配置或不支持的映射