深度克隆列表对象

时间:2018-10-21 12:58:58

标签: c# list collections clone

我需要知道如何深度克隆List <Business>对象。我尝试了以下方法:

List< Business> owner = bus.Select(m => new Business{
    Businessname= m.Businessname,
    Locations= m.Locations,

 }).ToList();

我从Locations对象中删除了一个对象(List <Country>-位置是owner)。如上代码所示,我在克隆bus对象时预期不会对其进行任何更改。

但是,对象Locations也已从bus对象中删除。有人可以告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您应按以下步骤执行克隆操作:

List< Business> owner = bus.Select(m => new Business
{
    Businessname = m.Businessname,
    Locations = m.Locations?.Select(l => new Country { /*here goes your initialization*/})
})
.ToList();

运算符?进行空检查,如果Locations字段为null,它将停止执行并返回null,否则它将执行Select操作。

请注意,如果Country对象还包含引用类型的字段,则应显式创建该对象并复制所有字段。

答案 1 :(得分:0)

几乎所有对象或数据结构最简单,最通用的克隆方法是对其进行序列化和反序列化。 Newtonsoft JSON足够快速,智能,足以处理复杂的情况,例如循环引用,接口类型的字段等等。

var str = JsonConvert.SerializeObject(myList);
var deepCopy = JsonConvert.DeserializeObject<List<MyObject>>(str);

但是,这可能不是最快的方法,因为它做了很多额外的工作和分配。