如何正确克隆List <MyObject>?

Dev*_*per 14 .net c# generics generic-list

可能重复:
如何在C#中克隆通用列表?

List<MyObject> a1 = new List<MyObject>();

var new1 = a1;
Run Code Online (Sandbox Code Playgroud)

现在,如果我改变,a1那么new1也将改变.

所以我的问题是如何正确克隆a1

aqw*_*ert 34

这不会Clone列表中的每个项目,但会创建一个新列表

var new1 = new List<MyObject>(a1);
Run Code Online (Sandbox Code Playgroud)

如果要克隆每个项目的列表,你可以实现ICloneableMyObject

var new1 = new List<MyObject>(a1.Select(x => x.Clone()));
Run Code Online (Sandbox Code Playgroud)

编辑:为了使它更清楚,两者都会将列表中的元素复制a1到新列表中.您只需要决定是否要有新MyObject的或保留原件.如果你想要克隆,MyObject你将需要一种克隆它们的方法,这通常是通过ICloneable.

  • 他的解决方案如何不处理所有项目? (6认同)
  • var new1 = new List &lt;MyObject&gt;(a1); 仅适用于值类型,您应该更新答案。 (2认同)