在c#中深度复制节点



长话短说,我有一个节点树。我必须将一个节点的信息复制到另一个节点,但是当我更改第二个节点时,第一个节点也会更改。我在Node类中创建了这个方法:

public Node DeepCopyNode(Node node)
{
Node newNode = new Node(node.Name, node.NodeТype, node.ParentExist, node.TagArguments, node.Parent, node.Children, node.NumberInCount);
for (int i = 0; i < node.Children.Count; i++)
{
if (node.Children[i] != null)
{
DeepCopyNode(node.Children[i]);
}
}
return newNode;
}

我试图对节点进行深度复制,但不幸的是没有工作。如果有人有什么建议,请写下来:)

对对象进行深度复制的最简单方法是对它的序列化版本进行反序列化:

var newNode = JsonConvert.DeserializeObject<Node>(JsonConvert.SerializeObject(node));
Node newNode = new Node(... node.Parent, node.Children ...);

这是错误的。如果要进行深度复制,则不能使用正在复制的节点的父节点或子节点。它应该看起来像

public Node DeepCopyNode(Node node, Node parent)
{
Node newNode = new Node(..., parent, new List<Node>(), ...);
var children = node.Children.Select(c => DeepCopyNode(c, newNode )).ToList();
newNode.Children.AddRange(children); 
return newNode;          
}

所有这些都假设只需要深度复制树,而不需要在树中存储任何其他值。

最新更新