【问题标题】:How to make a deep copy of a List of Object如何制作对象列表的深层副本
【发布时间】:2016-02-01 11:50:33
【问题描述】:

您好,我有一个对象列表 (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

我希望能够在不编辑 list2 中的对象的情况下编辑 list1 中的对象,我怎样才能得到呢???

感谢您的回答

【问题讨论】:

标签: c# list object copy deep-copy


【解决方案1】:

您应该在您的Obj 类中实现ICloneable 接口。之后,您可以调用此代码来创建您的第二个列表:

list<Obj>  list2 = new list<Obj>(list1.Select(x => x?.Clone()));

它将克隆列表中的每个项目。 (带空检查)

【讨论】:

  • 不要实现ICloneable,创建自己的接口并使用它。 stackoverflow.com/questions/699210/…
  • 嗯,这个概念仍然成立。
  • 确实,解决方案不错,我喜欢。我只是认为 ICloneable 是一个非常糟糕的界面。
【解决方案2】:

您可以向您的Obj 添加一个复制构造函数

然后遍历 list1 使用复制构造函数创建对象的新实例并将其添加到 list2。

示例:

复制构造函数:

public Obj(Obj copyFrom)
{
   this.field1 = copyFrom.field1;
   .
   .
}

通过以下 LINQ 查询,您可以使用上述构造函数:

list2.AddRange(list1.Select(s => new Obj(s)));

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多