今天遇到一个问题,如何深层拷贝一个对象?
想了一个方法,前提是所有相关类型都必须具有公共、无参、实例构造函数。
public object DeepCloneObject(object obj)
{
object newObj = Activator.CreateInstance(obj.GetType());
foreach (FieldInfo fi in obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
{
if (fi.FieldType.IsValueType)
fi.SetValue(newObj, fi.GetValue(obj));
else
fi.SetValue(newObj, DeepCloneObject(fi.GetValue(obj)));
}
return newObj;
}
不知道还有没有更好的方法。(^-^)