包含Dictionary的对象上的MemberwiseClone不起作用

时间:2014-08-07 12:40:34

标签: c#

我有一些包含Dictionary的对象 - 我尝试了MemberwiseClone - 但这会返回一个新对象,但在Dictionary上我得到原始Dictionary对象的引用而不是副本。

为什么? 如何在不使用原始字典上的foreach并将Dictionary的原始对象放入新字典中的情况下简单克隆我的对象?

1 个答案:

答案 0 :(得分:3)

MSDN说Object.MemberwiseClone

  

创建当前Object的浅表副本。

正如@firda已经指出浅层复制不会创建每个字段的深层副本 - 它创建表面副本 - What is the difference between a deep copy and a shallow copy?

对对象引用的浅层复制存储在对象的字段中意味着只有引用的值("指针")将被复制到新对象。因此,在您的情况下,字段中引用的Dictionary将不会被实际复制(克隆) - 旧对象和克隆对象中的字段仍将引用相同的旧Dictionary

这与通常的作业相同 - C# Reference type assignment VS value type assignment

P.S。 C#和.NET没有提供任何简单和原生的方法来组织深度复制。您可以尝试使用某些第三方工具或手动实施方法 - Deep cloning objects