我有以下用于生成层次结构树的类

public class DynaTreeNode
{
    #region---Property---
    public string title { get; set; }
    public string key { get; set; }
    public object icon { get; set; }
    List<DynaTreeNode> _children = new List<DynaTreeNode>();
    public List<DynaTreeNode> children
    {
        get { return _children; }
        set { _children = value; }
    }
}


我也有一个DynaTreeNode的列表

List<DynaTreeNode> wholeTree = new List<DynaTreeNode>();//originally from DB


现在我想将此列表集合克隆到一个新列表中

做这个,我正在考虑使用

wholeTree.Select(i => i.Clone()).ToList();


在这种情况下,我需要实现DynaTreeNode的IClonable接口。但是问题是IClonable不会做深层复制。来自http://blogs.msdn.com/b/brada/archive/2003/04/09/49935.aspx

引用的How do I clone a generic list in C#?

这个答案也使用IClonable。

如何克隆具有深拷贝的列表?

注意:我希望所有子项(列表)也应该被克隆。

最佳答案

如果性能不是太大的问题,则可以使用序列化来实现常规的深度克隆方法(例如,参见this questionthis questionthis question或查看此article)。

如果这不是一个选择(例如,出于性能方面的考虑),则必须实现一种专用方法来克隆节点。例如,您的方法

wholeTree.Select(i => i.Clone()).ToList();


完全是valid。您自己的Clone方法实现当然可以返回深层克隆(ICloneable不指定深层还是浅层;这就是许多人认为ICloneable有害的原因)

关于c# - List <T>的Deep Clone with out,其中T是ICloneable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15018208/

10-16 04:47