//建议使用第一种
public static T DeepClone<T>(T obj)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Seek(0, SeekOrigin.Begin);
T model = (T)bf.Deserialize(ms);
ms.Dispose();
return model;
}
//这种克隆 出了一次问题, 使用的时候克隆很深的对象的时候出了问题
public static T Clone<T>(T obj)
{
T ret = default(T);
if (obj != null)
{
XmlSerializer cloner = new XmlSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream())
{
cloner.Serialize(stream, obj);
stream.Seek(0, SeekOrigin.Begin);
ret = (T)cloner.Deserialize(stream);
}
}
return ret;
}
c#深克隆
最新推荐文章于 2024-06-05 09:38:41 发布
这篇博客探讨了两种对象克隆方法:基于二进制序列化的深度克隆和基于XML序列化的浅克隆。第一种方法使用`BinaryFormatter`实现,适用于复杂对象的深拷贝,而第二种方法利用`XmlSerializer`,在某些情况下可能存在问题,特别是在处理深层对象结构时。文章通过代码示例展示了这两种方法的用法,并指出在选择克隆方法时应考虑对象的复杂性和性能需求。
摘要由CSDN通过智能技术生成