C#使用BinaryFormatter深度复制树结构

时间:2010-09-03 19:54:11

标签: c# tree reference hierarchical-data deep-copy

编辑1

肯特减轻了我的恐惧。但是,我发现规则有一个例外。我为Node类编写了一个方法,该方法将遍历层次结构,直到它到达根节点并返回其哈希码。除了一个单独的对象之外,哈希码在整个行中都是一样的。总之,RAGE。


我正在编写我的第一个(相对)大型C#应用程序。但是,我想我发现了一个我搞砸的主要错误。

我的应用程序解析XML文件并创建一个对象层次结构,每个对象都继承自Node类,包含子列表和节点父引用。

我需要能够复制这个结构。概念是初始结构保存默认数据,您可以在使用它时获得自己的副本并对其进行修改。所以我使用了通用的 DeepClone<使用 BinaryFormatter 进行T> 扩展方法。

我的问题,虽然我觉得我已经知道(并且害怕)答案是什么,这是否会让我重新分配所有父节点和子节点的引用?


免责声明:在我完成这项工作后,我意识到我所犯的所有设计错误以及如何避免这些设计错误,包括这一错误。在我的辩护中,这个大学的学期将是我第一次参加数据结构课程。 ;)我完全期望有一个我未能实现的树的重要部分可以帮助解决这个问题。 > _<

1 个答案:

答案 0 :(得分:1)

没有。序列化过程记录对象之间的引用,反序列化过程恢复这些关系。

编辑:除非我误解了你的问题 - 你的意思并不清楚。一旦客户端代码对克隆结构进行了更改,您就可以将这些更改合并到主数据结构中,如果这是您想要做的事情。

您可能需要查看IEditableObject以获得更正式的方式来处理此类事情。您可能会继续使用序列化作为在编辑之前克隆对象的方法,但您的界面将更加标准化。