Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用BinaryFormatter深度复制树结构 编辑1_C#_Tree_Reference_Hierarchical Data_Deep Copy - Fatal编程技术网

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

C#使用BinaryFormatter深度复制树结构 编辑1,c#,tree,reference,hierarchical-data,deep-copy,C#,Tree,Reference,Hierarchical Data,Deep Copy,肯特减轻了我的恐惧。然而,我发现了一个例外。我为Node类编写了一个方法,该方法将遍历层次结构,直到到达根节点并返回其哈希代码。除了一个单独的对象外,散列代码在整个行中都是相同的。一句话,愤怒 我在写我的第一个(相对)大型C#应用程序的末尾。然而,我想我发现了一个我搞砸了的大错误 我的应用程序解析一个XML文件并创建一个对象层次结构,每个对象继承自一个节点类,包含子对象列表和一个节点父引用 我需要能够复制这个结构。概念是初始结构保存默认数据,您可以获得自己的副本并在使用时对其进行修改。因此,我

肯特减轻了我的恐惧。然而,我发现了一个例外。我为Node类编写了一个方法,该方法将遍历层次结构,直到到达根节点并返回其哈希代码。除了一个单独的对象外,散列代码在整个行中都是相同的。一句话,愤怒


我在写我的第一个(相对)大型C#应用程序的末尾。然而,我想我发现了一个我搞砸了的大错误

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

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

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



免责声明:当我完成这项工作时,我意识到我犯下的所有设计错误以及如何避免这些错误,包括这一次。为我辩护,这学期在大学将是我第一次参加数据结构课程我完全希望我未能实现的树的某些关键部分能够帮助解决这个问题。>_ 否。序列化过程记录对象之间的引用,反序列化过程恢复这些关系

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


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

听起来您理解我的问题。这是一个巨大的安慰。谢谢你,肯特!感谢您对IEditableObject的引用。在.NET中,数据源对我来说仍然是一个未知领域,这将给我充分的理由去了解它