自动映射器在映射时保留引用

本文关键字:映射 保留 引用 | 更新日期: 2023-09-27 18:32:28

我正在尝试以获得现有实例的新副本的方式克隆对象。

我像这样使用自动映射器:

Mapper.CreateMap(typeof(VariableSet), typeof(VariableSet));
var destinationObject = Mapper.Map<VariableSet>(command.VariableSets[0]);
command.VariableSets.Add(destinationObject);

我有一个数组:

command.VariableSets

我正在尝试添加位于该数组第 0 个索引处的对象的另一个实例。 但是当我使用自动映射器时,它会通过引用创建另一个实例。因此,如果我更改第 0 个索引对象中的任何子属性,它也会在第一个索引对象中更新。

我尝试使用序列化反序列化方法克隆对象,但我必须使我的对象[Serializable]这有其自身的问题。

自动映射器在映射时保留引用

您可以手动创建新对象,然后将对象映射到对象:

var destinationObject = 
    Mapper.Map<VariableSet, VariableSet>(command.VariableSets[0], new VariableSet());
如果

还需要为其创建新对象,则可以对 VariableSet 的每个引用类型属性应用相同的逻辑。

Howewer,有几种方法可以创建对象的副本。例如,您可以实现ICloneable接口,然后使用Clone方法。它使您可以完全控制深度复制,并且不需要自动映射器工具。你可以在这里找到大量的信息:

深度克隆对象