[英]Deep copy a node in 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;
}
所有这一切都假设只有树需要深度复制,而不是存储在树中的任何其他值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.