每次要深度复制一个对象,就要求该对象要实现IClonable,还要自己去实现Clone,很烦人。
这里分享了一个运用了序列化的方式,深度复制对象。但是要求给对象要标记为可序列化Serialiabe。
1 /// <summary>
2 /// 深度复制
3 /// <para>T 要求为可序列化的对象</para>
4 /// <para>只能复制标记为序列化的属性或字段</para>
5 /// </summary>
6 /// <typeparam name="T">序列化类型</typeparam>
7 public class CloneProvider<T>
8 {
9 /// <summary>
10 /// 序列化的对象
11 /// </summary>
12 private T TObject;
13
14 /// <summary>
15 /// 实例化 CloneProvider
16 /// </summary>
17 /// <param name="obj">序列化的对象</param>
18 public CloneProvider(T obj)
19 {
20 this.TObject = obj;
21 }
22
23 /// <summary>
24 /// 复制
25 /// </summary>
26 /// <returns></returns>
27 public virtual T Clone()
28 {
29 MemoryStream memoryStream = new MemoryStream();
30 BinaryFormatter formatter = new BinaryFormatter();
31 formatter.Serialize(memoryStream, this.TObject);
32 memoryStream.Position = 0;
33 return (T)formatter.Deserialize(memoryStream);
34 }
35 }