繁体   English   中英

深度克隆列表对象

[英]Deep cloning List Object

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

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

 }).ToList();

我从owner对象中删除了一个对象( Locations -Locations是List <Country> )。 如上代码所示,我在克隆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();

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM