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;
}