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;
    }
  • 相关阅读:
    inet_ntoa解析
    日语常用计算机词汇
    Visual Studio 2012 : error LNK2026: module unsafe for SAFESEH image
    android异常总结四 :Unexpected text found in layout file: """
    android异常总结三 :R文件丢失
    android异常总结二 :This text field does not specify an inputType or a hint
    android异常总结一 :reslayoutOtherActivity.xml: Invalid file name: must contain only [a-z0-9_.]
    Win8下配置java环境
    CUDA实例练习(五):两数相加
    CUDA实例练习(四):矩阵转置
  • 原文地址:https://www.cnblogs.com/zxktxj/p/2486776.html
Copyright © 2011-2022 走看看