繁体   English   中英

在 C# 中深度复制一个节点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM