0

编辑 1

肯特减轻了我的恐惧。但是,我发现该规则有一个例外。我为 Node 类编写了一个方法,该方法将向上遍历层次结构,直到到达根节点并返回其哈希码。除了一个对象之外,哈希码一直是相同的。总之,愤怒。


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

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

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

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


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

4

1 回答 1

1

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

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

您可能想看看IEditableObject一种更正式的方式来处理这种事情。您可能会继续使用序列化作为在编辑之前克隆对象的方法,但您的界面将更加标准化。

于 2010-09-03T19:58:59.033 回答