1.工具类
/// <summary>
/// 深复制扩展类,需要T支持可序列化
/// </summary>
public class DeepCopyExtensions<T>
{
/// <summary>
/// 对象深复制方法
/// 不管是值类型的成员还是引用类型的成员,在对象副本中对任何一个成员属性的修改,都不会影响到改变源对象的值。
/// 深复制的前提,是对象T支持【可序列化】操作,比如T 类上有[Serializable]标签
/// 调用方式:
/// A b = DeepCopyExtensions<A>.DeepCopy(a);
/// </summary>
/// <param name="item">目标对象</param>
public static T DeepCopy(T item)
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, item);
stream.Flush();
stream.Position = 0;
return (T)formatter.Deserialize(stream);
}
/// <summary>
/// 深复制的前提,是对象T支持【可序列化】操作,比如T 类上有[Serializable]标签
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static List<T> DeepCopy(object list)
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, list);
stream.Flush();
stream.Position = 0;
return (List<T>)formatter.Deserialize(stream);
}
}
2.使用方式
//深复制的前提,是对象支持可序列化操作
[Serializable]
public class A
{
public string Name { get; set; }
public int Age { get; set; }
public int Sex { get; set; }
}
A a = new A();
a.Name = "Tom";
a.Age = 12;
a.Sex = 0;
A b = DeepCopyExtensions<A>.DeepCopy(a);//调用方式
//此后对a或b的属性进行修改,两个对象之间都互不影响。