1.反射方法实现
public static object DeepCopy(object obj)
{
Type T = obj.GetType();
if (T is string || T.IsValueType)
{
return obj;
}
object o = Activator.CreateInstance(T);
FieldInfo[] fs = T.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
for (int i = 0; i < fs.Length; i++)
{
FieldInfo f = fs[i];
f.SetValue(o, DeepCopy(f.GetValue(obj)));
}
return o;
}
该方式可能拷贝不彻底,具体还要看类是如何定义的(以上写法适用类中仅有字段成员变量)
2.序列化方法实现
public static object DeepCopy(object obj)
{
object o;
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream, obj);
stream.Seek(0, SeekOrigin.Begin);
o = bf.Deserialize(stream);
stream.Close();
}
return o;
}
作为参数传入的对象的类型声明前面需要加上
[Serializable]