如何在使用数组复制结构时强制执行深层复制?

时间:2010-04-24 21:15:58

标签: c#

如果有

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方法并且每次都调用它?这极易出错......

3 个答案:

答案 0 :(得分:3)

通常,您应该避免将像Array这样的可变引用类型放入结构中。请参阅this question并回答。

因此,请将您的类作为引用类型并为其提供DeepCopy方法。甚至更好 - 让你的类型不可变,这样你就不需要复制了。

答案 1 :(得分:1)

您需要自己实施深层复制方法。

API设计人员经常设计克隆()克隆(bool deep) Copy()方法来执行此操作。< / p>

ICloneable 有时用于标记类是可克隆的,但它可能会造成混淆,因为它没有指定Clone()方法是深层还是浅层。 Why should I implement ICloneable in c#?

答案 2 :(得分:0)

无法做到这一点。您需要实现自己的深层复制机制。