我需要知道如何深度克隆List <Business>
对象。我尝试了以下方法:
List< Business> owner = bus.Select(m => new Business{
Businessname= m.Businessname,
Locations= m.Locations,
}).ToList();
我从Locations
对象中删除了一个对象(List <Country>
-位置是owner
)。如上代码所示,我在克隆bus
对象时预期不会对其进行任何更改。
但是,对象Locations
也已从bus
对象中删除。有人可以告诉我如何解决这个问题吗?
答案 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);
但是,这可能不是最快的方法,因为它做了很多额外的工作和分配。