C#深拷贝扩展方法(引用类型利用序列化实现深拷贝)


/// <summary>
/// 深拷贝
/// 注意:T必须标识为可序列化[Serializable]
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T DeepCopy<T>(this T obj)
where T : class
{
try
{
if (obj == null)
{
return null;
}

BinaryFormatter binaryFormatter = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream())
{
binaryFormatter.Serialize(stream, obj);
stream.Position = 0;
return (T)binaryFormatter.Deserialize(stream);
}
}
catch
{
return null;
}
}
注意:

1.上述方法中,限定泛型T为引用类型,因为值类型本身不需要深拷贝;

2.类型T必须标明可序列化,即类前面添加特性[Serializable]。

作者:阿笨

      【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558跟着阿笨一起玩NET

      【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616跟着阿笨一起玩C#

      【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586跟着阿笨一起玩ASP.NET

      【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:806491485Asp.Net Core跨平台技术开

      【官方QQ五群:.NET Core跨平台开发技术(可加入)】:1036896405.NET Core跨平台开发技术

      【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628

      【腾讯课堂】:https://abennet.ke.qq.com

      【51CTO学院】:https://edu.51cto.com/sd/66c64

      【微信公众号】:http://dwz.cn/ABenNET

原文地址:https://www.cnblogs.com/51net/p/15239454.html