代码之家  ›  专栏  ›  技术社区  ›  Danvil

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

c#
  •  4
  • Danvil  · 技术社区  · 14 年前

    如果有

    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 回复  |  直到 14 年前
        1
  •  3
  •   Community Ian Goodfellow    7 年前

    一般来说,应该避免将数组等可变引用类型放入结构中。见 this question 然后回答。

    因此,将类设置为引用类型并为其提供deepcopy方法。或者更好的方法-让你的类型不可变,这样你就不需要复制了。

        2
  •  1
  •   Community Ian Goodfellow    7 年前

    您需要自己实现深度复制方法。

    通常,api设计人员会设计一个 克隆() , 克隆(布尔深) 复制() 方法执行此操作。

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

        3
  •  0
  •   zumalifeguard Arctic    14 年前

    没办法。您需要实现自己的深度复制机制。