您的位置:首页 > 编程语言 > C#

C#对象深拷贝方法 - 通用版

2016-01-08 12:20 489 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: