c#深拷貝的一個方法

來源:互聯網
上載者:User

標籤:

使用ef,有時候會遇到,要對一個對象進行拷貝複製,可是一般的方法,拷貝後會提示此對象的執行個體在內容相關的 entitystate已經存在,就需要用一種拷貝。
簡單的拷貝只拷貝了實值型別,對參考型別的拷貝需要使用遞迴,依次迴圈到底。
public object Copy(object obj) {             Object targetDeepCopyObj;            try {                 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;            } catch (Exception e) {             }             return null;        }

c#深拷貝的一個方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.