嗨我有一个对象列表(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
我希望能够编辑list1中的对象而无需编辑list2中的对象,我该怎么做?
感谢您的回答
答案 0 :(得分:2)
您应该在Obj
课程中实施ICloneable
界面。之后,您可以调用此代码来创建第二个列表:
list<Obj> list2 = new list<Obj>(list1.Select(x => x?.Clone()));
它将克隆列表中的每个项目。 (使用空检查)
答案 1 :(得分:1)
您可以将复制构造函数添加到Obj
。
然后循环遍历list1,使用复制构造函数创建对象的新实例,并将其添加到list2。
示例:强>
复制构造函数:
public Obj(Obj copyFrom)
{
this.field1 = copyFrom.field1;
.
.
}
使用以下LINQ查询,您可以使用上述构造函数:
list2.AddRange(list1.Select(s => new Obj(s)));