Asp.net开发中不可靠的编码习惯
在调试程序时,我们检查代码的过程通常会跳过那些自己认为绝对不可能出错的代码或逻辑。然而有时候,当检查了一遍又一遍却找不到任何出错的可能性,而程序却的的确确不是按我们所设想的那样在运行。这时,很多人就认为自己遇到了灵异事件。这种体验几乎每个程序员都有过,但最终往往事实证明,是我们自己错了,错在不应该太坚信自己的习惯写法。
事例一:

2

3

4

5

注:p是aspx页面上声明的一个<p runat="server" id="p">...</p>标签。
在运行时发现,无论如何都执行不到if语句内部的do something部分的代码,即使调试时AllowDisplay的值明明为True也是如此!
以前写代码时经常采用类似的做法,都没出过任何问题,然后现在这个简单至极的代码却让人摸不着头脑了。
最后经过多番调试,才找到原因:p的上级容器控件的声明代码中因客观需要,被设置了Visible="false"! 所以,尽管控件的Visible属性不是只读属性,也不能贸然以为给它设置了什么它就会是什么。
事例二:

2

3

4

程序运行时,同样无法执行到if语句内部的do something部分的代码。这倒不奇怪,奇怪的是,调试发现,在“if (obj == null)”这一行代码中出现了异常!
按说,无论你obj是不是为空引用,这儿也不应该出错呀,这行代码在我的C#编程生涯中可是写了无数次的,怎么突然就出问题了呢?
在CSDN上问了,也有很多人回答了,但没一个人说到真正的症结所在。不得已,只能自己不停地动脑筋加调试,最后找到原因了。这是由于在OneClass这个类定义的操作符重载中,==操作符重载代码中缺少了对目标对象是否为空引用的判断,所以在程序运行到“if (obj == null)”时,就陷入了死循环!
对于这个问题,昨天园子里一位朋友也提出了更好的编码方式,那就是写成:if (null == obj)。
以上都是我在参与开发一个“通用信息管理系统”项目的过程中遇到的一些问题。类似的貌似诡异的现象还有不少,不过大多都在通过搜索网络后得到了答案,就不一一列出了。
最后,请容许我用一行文字宣传一下我们的作品吧:如果您困扰于ERP的昂贵和繁杂,那么请到http://landian.cc体验一下蓝点通用管理系统的清爽、时尚和灵活吧,您一定会爱上她!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)