.NET C# 深度复制工具类,需要使用对象支持可序列化

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的属性进行修改,两个对象之间都互不影响。

原文地址:https://www.cnblogs.com/jeff151013/p/11739596.html