C# 您能否使用它创建嵌套列表的深度副本';谁的构造函数?

C# 您能否使用它创建嵌套列表的深度副本';谁的构造函数?,c#,list,deep-copy,C#,List,Deep Copy,我知道你可以给一个列表对象作为列表构造函数的参数,以便将一个列表复制到另一个列表 通过这样做,如果使用的类型是一次简单内置的(,确切地说是?),则可以创建一个深度副本。例如,字符串类型的示例: List testList=newlist(); List testListCopy=新列表(testList); 如果使用嵌套列表,是否可以创建深度副本 List<List<string>> testList = new List<List<string>&g

我知道你可以给一个列表对象作为列表构造函数的参数,以便将一个列表复制到另一个列表

通过这样做,如果使用的类型是一次简单内置的(,确切地说是?),则可以创建一个深度副本。例如,字符串类型的示例:

List testList=newlist();
List testListCopy=新列表(testList);
如果使用嵌套列表,是否可以创建深度副本

List<List<string>> testList = new List<List<string>>();

List<List<string>> testListCopy = new List<List<string>>(testList );
List testList=newlist();
List testListCopy=新列表(testList);
列表构造函数不会为您执行此操作,但您可以使用以下工具自己执行此操作:

List<List<string>> testList = new List<List<string>>();
List<List<string>> testListCopy = new List<List<string>>(testList.Select(x => x.ToList()));
List testList=newlist();
List testListCopy=newlist(testList.Select(x=>x.ToList());
甚至是这个,相当于:

List<List<string>> testListCopy = testList.Select(x => x.ToList()).ToList();
List testListCopy=testList.Select(x=>x.ToList()).ToList();

副本不仅仅是浅的或深的。这是一个带有多个值的比例,带有“最深”和“最浅”选项。只需使用列表的复制构造函数,就可以得到中间的某个副本;它不是“深度复制”

您正在做的是重新创建一个新列表,而不复制对它的引用,但您正在对该列表中的项目执行浅层复制。如果该内部列表中的项本身是列表或其他可变引用类型,则需要对它们以及它们的所有引用字段等进行深度复制。这将是一个真正的“深度”拷贝。这样做并非小事,在一般情况下是不可能的。没有真正有效的方法为
公共静态T DeepCopy(T object)
编写一个适用于任何类型的实现。(您可以尝试利用序列化,但并非所有对象都可以序列化)

对于
列表的特定情况
,您只需创建一个新的外部列表,以及每个内部列表的新列表。P.s.w.g对这一特殊问题给出了一个解决方案:

List<List<string>> listCopy = list.Select(x => x.ToList()).ToList();
List-listCopy=List.Select(x=>x.ToList()).ToList();
List<List<string>> listCopy = list.Select(x => x.ToList()).ToList();