C#深拷貝擴充套件方法(引用型別利用序列化實現深拷貝)
阿新 • • 發佈:2018-12-22
/// <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]。