快速业务通道

Asp.net开发中的诡异现象

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

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

诡异现象一:

1bool AllowDisplay = CheckPower();
2p.Visible = AllowDisplay;
3if (p.Visible) {
4  //do something;
5}

注:p是aspx页面上声明的一个<p runat="server" id="p">...</p>标签。

在运行时发现,无论如何都执行不到if语句内部的do something部分的代码,即使调试时AllowDisplay的值明明为True也是如此!

以前写代码时经常采用类似的做法,都没出过任何问题,然后现在这个简单至极的代码却让人摸不着头脑了。

最后经过多番调试,才找到原因:p的上级容器控件的声明代码中被设置了Visible="false"!

诡异现象二:

1OneClass obj = GetOneClass();
2if (obj == null){
3  //do something;
4}

程序运行时,同样无法执行到if语句内部的do something部分的代码。这倒不奇怪,奇怪的是,调试发现,在“if (obj == null)”这一行代码中出现了异常!

按说,无论你obj是不是为空引用,这儿也不应该出错呀,这行代码在我的C#编程生涯中可是写了无数次的,怎么突然就出问题了呢?

在CSDN上问了,也有很多人回答了,但没一个人说到真正的症结所在。不得已,只能自己不停地动脑筋加调试,最后找到原因了。这是由于在OneClass这个类定义的操作符重载中,==操作符重载代码中缺少了对目标对象是否为空引用的判断,所以在程序运行到“if (obj == null)”时,就陷入了死循环!

以上都是我在参与开发一个“通用信息管理系统”项目的过程中遇到的一些问题。类似的貌似诡异的现象还有不少,不过大多都在通过搜索网络后得到了答案,就不一一列出了。

最后,请容许我用一行文字宣传一下我们的作品吧:如果您困扰于ERP的昂贵和繁杂,那么请到http://landian.cq.cn/体验一下蓝点通用信息管理系统的清爽、时尚和灵活吧,您一定会爱上她!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号