You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.1 KiB
35 lines
1.1 KiB
1 year ago
|
using System;
|
||
|
using System.IO;
|
||
|
using System.Runtime.Serialization;
|
||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||
|
|
||
|
namespace ChangkeTec.Utils
|
||
|
{
|
||
|
public static class ObjectMethodExtensions
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 深度复制 (值类型/包装类型/引用类型/序列化/非序列化/标识序列化/非标识序列化,皆可深度复制)
|
||
|
/// </summary>
|
||
|
public static T DeepClone<T>(this T obj)
|
||
|
{
|
||
|
var result = default(T);
|
||
|
try
|
||
|
{
|
||
|
IFormatter formatter = new BinaryFormatter();
|
||
|
formatter.SurrogateSelector = new SurrogateSelector();
|
||
|
formatter.SurrogateSelector.ChainSelector(new NonSerialiazableTypeSurrogateSelector());
|
||
|
var ms = new MemoryStream();
|
||
|
formatter.Serialize(ms, obj);
|
||
|
ms.Position = 0;
|
||
|
result = (T)formatter.Deserialize(ms);
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
throw new Exception("方法:DeepClone<T>(this T obj)出错.", ex);
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|