如何制作对象列表的深层副本

本文关键字:副本 列表 何制作 对象 | 更新日期: 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)));