【问题标题】:C# Need to deep copy an object [duplicate]C#需要深度复制一个对象[重复]
【发布时间】:2011-09-02 04:36:14
【问题描述】:

我需要将我创建的类中的一个对象深度复制到同一个类中的另一个对象,我不想浅拷贝,也不想使用序列化方法 还有其他简单的方法吗??

【问题讨论】:

  • 感谢大家的回答=)

标签: c# .net object constructor clone


【解决方案1】:

一种便宜的方法是对其进行序列化,然后使用二进制序列化直接反序列化。

MyObject myobj = new MyObject(); 
// ...

MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, myObj);

MemoryStream ms2 = new MemoryStream(ms.ToArray());

var myobj2 = (MyObject)formatter.Deserialize(ms2);

【讨论】:

  • 我听到了。但是如果你有一个真正复杂的对象图,这可能是最安全的方法。自定义“深拷贝”代码在添加字段时很容易遗漏字段。
  • 第二个流的创建是否复制了所有已写入流的数据?
  • @mathepic 是的。直到我第一次响应后,我才意识到第一个“答案”重定向到类似的解决方案:stackoverflow.com/questions/129389/… 他们通过从头开始寻找流来重用流。然而,使用 release GC 和 MemoryStream 的内部结构,它可能会重用数组。
【解决方案2】:

实现IClonable 并在Clone 方法中提供自己的克隆。

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2023-03-17
    • 2012-06-26
    相关资源
    最近更新 更多