Loading

c# 深度复制方法

先看图:

 

 

 1、此图中新建了selectUsers对象,该对象过滤存储了userEntities的数据,当修改selectUsers的值时,会修改的userEntities。

个人理解应该是虽然新建了selectUsers对象,但存储的依然是userEntities的引用地址,当修改selectUsers时会修改userEntities。

 

解决方法:

1、用Newtonsoft.Json序列化处理

 public static List<T> Clone<T>(this List<T> list) where T : new()

{
var str = JsonConvert.SerializeObject(list);
return JsonConvert.DeserializeObject<List<T>>(str);
}

2、用二进制序列化和反序列化处理

public static T DeepCopyByBinary<T>(T obj)
{
  object retval;
  using (MemoryStream ms = new MemoryStream())
  {
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(ms, obj);
    ms.Seek(0, SeekOrigin.Begin);
    retval = bf.Deserialize(ms);
    ms.Close();
  }
  return (T)retval;
}

posted @ 2022-05-20 15:34  河马先森  阅读(138)  评论(0编辑  收藏  举报