国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C# 使用反射來實現對象的深度復制方法

2020-01-26 14:16:33
字體:
來源:轉載
供稿:網友

實現方式

通過挨個羅列的方式一次復制子對象是非常耗費人力的,如果子對象是引用類型,則還要需要考慮是否對子對象進一步深拷貝。

實際應用中,一個類如果有幾十個子對象,挨個復制對于開發人員來說索然無味比較費時費力。

所以使用反射機制來實現。
 
但是如果是服務端運行的話,還是建議手動的實現。

畢竟反射機制比直接寫出來的效率要慢一些。

代碼:

public static class DeepCopyHelper  {    public static object Copy(this object obj)   {     Object targetDeepCopyObj;     Type targetType = obj.GetType();     //值類型     if (targetType.IsValueType == true)     {       targetDeepCopyObj = obj;     }     //引用類型      else     {       targetDeepCopyObj = System.Activator.CreateInstance(targetType);  //創建引用對象        System.Reflection.MemberInfo[] memberCollection = obj.GetType().GetMembers();        foreach (System.Reflection.MemberInfo member in memberCollection)       {         if (member.MemberType == System.Reflection.MemberTypes.Field)         {           System.Reflection.FieldInfo field = (System.Reflection.FieldInfo)member;           Object fieldValue = field.GetValue(obj);           if (fieldValue is ICloneable)           {             field.SetValue(targetDeepCopyObj, (fieldValue as ICloneable).Clone());           }           else           {             field.SetValue(targetDeepCopyObj, Copy(fieldValue));           }          }         else if (member.MemberType == System.Reflection.MemberTypes.Property)         {           System.Reflection.PropertyInfo myProperty = (System.Reflection.PropertyInfo)member;           MethodInfo info = myProperty.GetSetMethod(false);           if (info != null)           {             object propertyValue = myProperty.GetValue(obj, null);             if (propertyValue is ICloneable)             {               myProperty.SetValue(targetDeepCopyObj, (propertyValue as ICloneable).Clone(), null);             }             else             {               myProperty.SetValue(targetDeepCopyObj, Copy(propertyValue), null);             }           }          }       }     }     return targetDeepCopyObj;   } }

以上這篇C# 使用反射來實現對象的深度復制方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 邵阳县| 海兴县| 巨野县| 怀集县| 兴安盟| 诸城市| 庆元县| 永昌县| 太和县| 松原市| 偏关县| 东阿县| 长沙县| 阜康市| 麻栗坡县| 阿尔山市| 南丰县| 安溪县| 陇西县| 应城市| 礼泉县| 凤山市| 小金县| 沽源县| 上蔡县| 蒙山县| 舒兰市| 新密市| 镇江市| 柳江县| 屏边| 普定县| 姜堰市| 苍山县| 双牌县| 资溪县| 武冈市| 广德县| 阿拉尔市| 汝州市| 额尔古纳市|