周一深说--未将对象引用设置到对象的实例(System.NullReferenceException)
2011-07-25 13:36 白面青铜 阅读(563) 评论(3) 编辑 收藏 举报1. 异常:
"未将对象引用设置到对象的实例"
2. 本质
1). 字符串的空引用.
2). 空对象的空引用.
3. 解决方案I:
简单直白:在所有引用地方判断
. if(!string.IsNullOrEmpty(User.UserName))
.if(null!=User)
点评: 面向过程开发的思维.
A.这种办法看起来确实像一个很有经验的老鸟写的代码,不错,没有任何问题.但事实上只能称得上细心,与"菜"和"老"一点关系也没有. 就好像有人告诉你:这地方有雷,不能踩. 所有的人都会绕过去的,除非傻子.
B. 看起来很稳定可靠,其实是最不可靠的:比如
User类有N个字符串属性: UserName,NickName,Address...
一个方法中都用到了则要: if(!string.IsNullOrEmpty(User.UserName) && !string.IsNullOrEmpty(User.NickName).......)
这是一个非常有看点的一行代码,别说人的精力有限,神仙也难保证在一个上十万行代码里面每个地方都判断,致命的一点是这个代码不是你一个写,你能保证每人都不是你认为的傻子吗?老板肯会花重金全部招聘老鸟?
C. 最终的结果: XXX代码规范.doc中的"每个引用前要判空的"的规范形同虚设,空引用的异常隔三叉五的跑出来,老板经常跳出来骂人.
4. 解决方案II.
先具备个基本素质:理解面向对象编程. 理解设计模式.
底层保证不返回空串,而是返回空白串.
底层保证不返回空对象,而是空白对象.
最外层逻辑用Try Catch
点评:
A. 解决99%的空引用,除非你一定要用空引用异常来做为业务逻辑.
B. 相当可靠,除非你故意给一个对象主动设置为NULL.
C. 最外层一道Try Catch关,万无一失保证老板不会一个月之内出来骂你一次,最多只是偶尔来问下: 现在提示"系统繁忙,稍后再试",是怎么回事?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库