【问题标题】:C# Deep Copying Tree Structures with BinaryFormatterC# 使用 BinaryFormatter 深度复制树结构
【发布时间】:2010-09-03 19:54:11
【问题描述】:

编辑 1

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


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

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

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

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


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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 听起来你明白我的问题。这是一个巨大的解脱。谢谢肯特!
    • 感谢您对 IEditableObject 的引用。在 .NET 中,数据源对我来说仍然是一个未知的领域,这将给我很好的理由去了解。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多