我需要知道如何深度克隆List <Business>
对象。我尝试了以下方法:
List< Business> owner = bus.Select(m => new Business{
Businessname= m.Businessname,
Locations= m.Locations,
}).ToList();
我从对象中删除了一个对象(Locations
- 位置是一个List <Country>
owner
(。我预计bus
对象不会发生任何更改,因为我克隆了它,如上面的代码所示。
但是,对象Locations
也已从bus
对象中删除。有人可以告诉我如何解决这个问题吗?
应按如下方式执行克隆操作:
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
对象还包含引用类型字段,则应显式创建该对象并复制所有字段。
深度克隆几乎任何对象或数据结构的最简单和最通用的方法是序列化和反序列化它。Newtonsoft JSON 非常快速和智能,足以处理复杂的场景,例如循环引用、接口类型字段等。
var str = JsonConvert.SerializeObject(myList);
var deepCopy = JsonConvert.DeserializeObject<List<MyObject>>(str);
但是,这可能不是最快的方法,因为它会做很多额外的工作和分配。