如何制作对象列表的深层副本
本文关键字:副本 列表 何制作 对象 | 更新日期: 2023-09-27 18:32:40
嗨,我有一个对象列表(
list1(,我想复制这个列表,但我希望第二个列表(list2(中的对象不要链接到第一个列表中的对象。
这就是我所做的
list<Obj> list1 = new list<Obj>{};
// I fill the list1 with objects Obj
// now I want to make a deep copy this is what I do
list<Obj> list2 = new list<Obj>(list1);
// but when I edit an object in list 1 I also edit the object in list2
我希望能够在不编辑列表 2 中的对象的情况下编辑 list1 中的对象,我该如何获得它???
感谢您的回答
您应该在Obj
类中实现 ICloneable
接口。之后,您可以调用此代码来创建第二个列表:
list<Obj> list2 = new list<Obj>(list1.Select(x => x?.Clone()));
它将克隆列表中的每个项目。(带空检查(
您可以将复制构造函数添加到Obj
。
然后遍历 list1,使用复制构造函数创建对象的新实例并将其添加到 list2。
例:
复制构造函数:
public Obj(Obj copyFrom)
{
this.field1 = copyFrom.field1;
.
.
}
通过以下 LINQ 查询,您可以使用上述构造器:
list2.AddRange(list1.Select(s => new Obj(s)));