我有以下用于生成层次结构树的类
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 question,this question,this 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/