自动映射器在映射时保留引用
本文关键字:映射 保留 引用 | 更新日期: 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
方法。它使您可以完全控制深度复制,并且不需要自动映射器工具。你可以在这里找到大量的信息:
深度克隆对象