|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我在写项目的时候,定义了一个自己的class类,然后中间用到这个类的实例化对象的时候,需要复制拷贝一下,因为对象赋值是引用传值,修改新对象时会影响到旧对象,然后查到可以用反射来实现深拷贝,方法如下:
public static T DeepCopy<T>(T obj)
{
//如果是字符串或值类型则直接返回
if (obj is string || obj.GetType().IsValueType) return obj;
object retval = Activator.CreateInstance(obj.GetType());
FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
foreach (FieldInfo field in fields)
{
try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
catch { }
}
return (T)retval;
}
然后我在别的窗口里面调用这个方法:
CommonClass.MapPropertyClass OldMap = CopyObject.DeepCopy(_MapProperty); //先把旧图存储一下
CopyObject:是我存放深拷贝方法的静态类
CommonClass.MapPropertyClass:这是我自己定义的class类
然后运行时就会报错,卡在if (obj is string || obj.GetType().IsValueType) return obj;这一步,说是没有实例化对象,
我用断点调试了,再CommonClass.MapPropertyClass OldMap = CopyObject.DeepCopy(_MapProperty);这一步的时候我的_MapProperty还是不是null的,但一传到DeepCopy里面,obj就是null了就会报错
有没有大佬懂怎么解决的,可以有偿~~我QQ:704151621(加好友时备注来意) |
|