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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章