zoukankan      html  css  js  c++  java
  • .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的属性进行修改,两个对象之间都互不影响。

  • 相关阅读:
    当 Messaging 遇上 Jepsen
    Dubbo 在跨语言和协议穿透性方向的探索:支持 HTTP/2 gRPC
    MongoDB与阿里云达成战略合作,最新数据库独家上线阿里云!
    新网银行微服务转型实践
    微服务架构四大金刚利器
    揭秘2019 双11背后的阿里巴巴超强网络
    揭秘2019双11背后的云网络 – 双11网络架构和洛神系统
    小程序的餐饮之路:从流量捕手到流量塘主的进阶秘籍
    备忘录(Memento)模式
    状态(state)模式
  • 原文地址:https://www.cnblogs.com/jeff151013/p/11739596.html
Copyright © 2011-2022 走看看