鱼C论坛

 找回密码
 立即注册
查看: 1150|回复: 0

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

[复制链接]
发表于 2022-6-2 19:09:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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(加好友时备注来意)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表