可能重复:
如何在C#中克隆通用列表?
我想在C#中将列表复制到另一个列表.问题是现有方法如copyto从另一个列表创建新列表.但是,如果我对新列表进行一些更改,旧列表也会发生变化.它因为它们的引用类型行为.如果有任何方法(除了foreach循环)从另一个列表创建一个新列表,它不会引用同一个对象
Roy*_*tus 16
所以你想要的是列表的深层副本 - 其中第二个列表包含第一个列表元素的副本.在这种情况下,当任何列表的元素发生变化时,另一个列表保持不变.
如何做到这一点取决于列表中的元素是引用类型还是值类型.可以轻松克隆值类型列表,如下所示:
List<int> deepCopy = new List<int>(originalList);
Run Code Online (Sandbox Code Playgroud)
对于引用类型列表,您可以使用序列化,如下所示:
public List<MyObject> DeepCopy()
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, this);
ms.Position = 0;
return (List<MyObject>) bf.Deserialize(ms);
}
Run Code Online (Sandbox Code Playgroud)