kdhejy 发表于 2022-6-2 19:09:02

关于类没有实例化报错的小问题

我在写项目的时候,定义了一个自己的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(加好友时备注来意)
页: [1]
查看完整版本: 关于类没有实例化报错的小问题