泛型的深度复制

每次要深度复制一个对象,就要求该对象要实现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 }

 

posted @ 2014-07-31 19:45  lcyan  阅读(360)  评论(0编辑  收藏  举报