如何在C#中复制List

8

我想复制一个对象列表,但是我一直得到对象之间的引用。

List<MyClass> copy = original;

当我改变复制列表中的值时,原始列表也会被修改。有没有一种方法来解决这个问题?


请查看此帖子:https://dev59.com/SXRB5IYBdhLWcg3wxZ7Y - Glenn Ferrie
1个回答

14

你可以这样做:

List<MyClass> copy = original.ToList();

这将会对列表进行逐个元素的复制,而不是仅仅复制对于列表本身的引用。


1
@ricojohari,您能否具体说明“不起作用”的部分是什么? - Sergey Kalinichenko
2
当我改变复制列表的值时,原始列表也被修改了。 - ricojohari
@ricojohari 对的 - 这是因为复制是浅层的。如果您向原始列表添加或删除项目,则复制将无法“看到”该更改。但是,更改列表内可变对象也会反映在复制品中。 - Sergey Kalinichenko
深拷贝会保留原始列表中的值,即使复制的列表被修改了吗? - ricojohari
@ricojohari 是的。如果你想要一个深度拷贝,可以使用 List<MyClass> copy = original.Select(v => new MyClass(v)).ToList();(假设MyClass有一个"copy constructor"可以接受相同类别的实例,并返回该对象的"deep copy")。 - Sergey Kalinichenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接