System.NullReferenceException异常排查:费用类虚拟Branch属性赋值问题
解决Expense类虚拟Branch属性赋值的空引用异常
嘿,这个空引用异常我太熟了!大概率是你在给Branch的描述赋值时,压根没先把Branch对象实例出来,咱们一步步捋清楚怎么解决:
最常见的问题及解决办法
问题1:Branch对象还没被实例化
你直接写expense.Branch.Description = xxx,但这时候expense.Branch还是null呢,系统找不到对象自然就报错了。
赶紧先new一个Branch实例再赋值:// 先把Branch对象创建出来 expense.Branch = new Branch(); // 再给描述赋值 expense.Branch.Description = 你从SQL拿到的分支描述;问题2:SQL返回的分支信息是空的
如果你的SQL查询里,某个费用对应的Branch描述本身就是null,或者BranchId没匹配到任何分支数据,那处理的时候得先做个判空检查,避免硬赋值:var branchDesc = 从SQL获取的分支描述; if (!string.IsNullOrEmpty(branchDesc)) { expense.Branch = new Branch { Description = branchDesc }; } // 要是允许Branch为null,也可以这么写 expense.Branch = branchDesc != null ? new Branch { Description = branchDesc } : null;问题3:用EF的话可能是延迟加载的锅
如果你是用Entity Framework来操作数据,虚拟属性默认是延迟加载,但你现在是手动写SQL查数据,不是用EF的Include(e => e.Branch)来关联加载分支数据,这时候Branch属性不会自动生成实例。要么像上面那样手动实例化,要么改成用EF的查询语句并加上Include来预先加载关联的Branch数据。
调试小技巧
遇到空引用异常时,先打断点看看expense本身是不是null,再看expense.Branch是不是null,一步步定位到底是哪个对象没初始化,很快就能找到问题啦。
内容的提问来源于stack exchange,提问作者Manpreet Narang
相关产品推荐
相关产品推荐

