如果有
struct A {
public double[] Data;
public int X;
}
如何在使用operator=
或将A
的实例添加到容器时强制执行深层复制?
问题出在例如:
A a = new A();
var list = new List<A>();
list.Add(a); // does not make a deep copy of Data
A b = a; // does not make a deep copy of Data
我是否真的必须实现自己的DeepClone
方法并且每次都调用它?这极易出错......
答案 0 :(得分:3)
通常,您应该避免将像Array这样的可变引用类型放入结构中。请参阅this question并回答。
因此,请将您的类作为引用类型并为其提供DeepCopy方法。甚至更好 - 让你的类型不可变,这样你就不需要复制了。
答案 1 :(得分:1)
您需要自己实施深层复制方法。
API设计人员经常设计克隆(),克隆(bool deep)或 Copy()方法来执行此操作。< / p>
ICloneable 有时用于标记类是可克隆的,但它可能会造成混淆,因为它没有指定Clone()方法是深层还是浅层。 Why should I implement ICloneable in c#?
答案 2 :(得分:0)
无法做到这一点。您需要实现自己的深层复制机制。