将列表复制到其他列表中

Jam*_*mes -1 c# list

我知道这被问了很多次,我试图实现同样的.我有下面的清单

internal class GenList
{

    public string Col1 { set; get; }
    public string Col2 { set; get; }

}

List<GenList> MainList = new List<GenList>();
Run Code Online (Sandbox Code Playgroud)

我想将列表复制到其他列表中,如果在主列表中更改了某些内容,则不希望内容在克隆列表中更改.所以我想在下面做

List<GenList> cloned = MainList.ConvertAll(GenList => new GenList {});
Run Code Online (Sandbox Code Playgroud)

我不知道在上面那些花括号内输入什么.

Jon*_*eet 10

如果在主列表中更改了某些内容,则不希望内容在克隆列表中更改.

这听起来像你想要一个深刻的克隆,基本上.换句话说,创建一个新列表,其中每个元素是原始列表中元素的副本,而不仅仅是对原始列表引用的同一对象的引用.

在您的情况下,这很简单:

var cloned = MainList.ConvertAll(x => new GenList { Col1 = x.Col1, Col2 = x.Col2 });
Run Code Online (Sandbox Code Playgroud)

或者使用LINQ:

var cloned = MainList.Select(x => new GenList { Col1 = x.Col1, Col2 = x.Col2 })
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

但请注意:

  • 如果添加新属性,则需要更改此代码
  • 如果添加可变类型的属性,则还需要克隆它

要考虑的选项:

  • 添加一个DeepClone()方法GenList,将逻辑保持在一个地方,但许多地方需要它.
  • 添加构造函数:GenList(GenList)适当地复制
  • 使用不可变类型(例如make GenListimmutable),此时集合的浅克隆就足够了.