当前位置:编程学习 > C#/ASP.NET >>

C#对象深拷贝方法

对象的拷贝是编程中常用到的,下面提供一个对象深拷贝的方法,挺不错的

[csharp] 
public 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; 
        } 
public object Copy(this object obj)
        {
            Object targetDeepCopyObj;
       

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,