• c# 深拷贝各种实现


    1:利用反射实现

      public T DeepCopy<T>(T obj)
            {
               object retval= Activator.CreateInstance(typeof(T));
                PropertyInfo[] pis = typeof(T).GetProperties();
                foreach (PropertyInfo pi in pis)
                {
                    try{pi.SetValue(retval, pi.GetValue(obj, null), null);  }
                    catch{  }
                }
                return (T)retval;
            }

    2:利用xml序列化和反序列化实现

       public T DeepCopy<T>(T obj)
            {
                object retval;
                using (MemoryStream ms = new MemoryStream())
                {
                    XmlSerializer xml = new XmlSerializer(typeof(T));
                    xml.Serialize(ms, obj);
                    ms.Seek(0, SeekOrigin.Begin);
                    retval = xml.Deserialize(ms);
                    ms.Close();
                }
                return (T)retval;
            }

    3:利用二进制序列化和反序列化实现

    public static T DeepCopy<t>(T obj)
    {
        
    object retval;
        
    using (MemoryStream ms = new MemoryStream())
        {
            BinaryFormatter bf 
    = new BinaryFormatter();
            
    //序列化成流
            bf.Serialize(ms, obj);
            ms.Seek(
    0, SeekOrigin.Begin);
            
    //反序列化成对象
            retval = bf.Deserialize(ms);
            ms.Close();
        }
        
    return (T)retval;
    }
     
    4:利用silverlight DataContractSerializer实现,用于在silverlight 客户端使用
       public static T DeepCopy<T>(T obj)
            {
                object retval;
                using (MemoryStream ms = new MemoryStream())
                {
                    DataContractSerializer ser = new DataContractSerializer(typeof(T));
                    ser.WriteObject(ms, obj);
                    ms.Seek(0, SeekOrigin.Begin);
                    retval = ser.ReadObject(ms);
                    ms.Close();
                }
                return (T)retval;
    }
  • 相关阅读:
    bzoj 2038
    ACM训练联盟周赛 A. Teemo's bad day
    The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set
    惊艳,Dubbo域名已改,也不再局限于Java!
    6月份值得一看的 Java 技术干货!
    90 % Java 程序员被误导的一个性能优化策略
    Spring Cloud Finchley 正式发布,包含 4 个重大更新!
    Java 11 快要来了,编译 & 运行一个命令搞定!
    Spring Boot 单元测试详解+实战教程
    Java 10 实战第 1 篇:局部变量类型推断
  • 原文地址:https://www.cnblogs.com/zxktxj/p/2486776.html
Copyright © 2020-2023  润新知