zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    大文件上传
    zabbix接口
    Vue 在不同的环境使用不同的接口地址
    Vue发布流程
    RabbitMQ集群一些使用细节
    Watcher 系统整体流程图
    监控系统各个模块部署
    deepin安装node和npm最新
    google安装json插件
    数据库访问性能优化 Oracle
  • 原文地址:https://www.cnblogs.com/zxktxj/p/2486776.html
Copyright © 2011-2022 走看看