ASP.NET中异常处理使用
通用语言运行时(clr)具有的一个很大的优势为,异常处理是跨语言被标准化的。一个在c#中所引发的异常可以在visual basic客户中得到处理。不再有 hresults 或者 isupporterrorinfo 接口。
尽管跨语言异常处理的覆盖面很广,但这一章完全集中讨论c#异常处理。你稍为改变编译器的溢出处理行为,接着有趣的事情就开始了:你处理了该异常。要增加更多的手段,随后引发你所创建的异常。
7.1 校验(checked)和非校验(unchecked)语句
当你执行运算时,有可能会发生计算结果超出结果变量数据类型的有效范围。这种情况被称为溢出,依据不同的编程语言,你将被以某种方式通知--或者根本就没有被通知。(c++程序员听起来熟悉吗?)
那么,c#如何处理溢出的呢? 要找出其默认行为,请看我在这本书前面提到的阶乘的例子。(为了方便其见,前面的例子再次在清单 7.1 中给出)
清单 7.1 计算一个数的阶乘
1: using system;
2:
3: class factorial
4: {
5: public static void main(string&#; args)
6: {
7: long nfactorial = 1;
8: long ncomputeto = int64.parse(args�);
9:
10: long ncurdig = 1;
11: for (ncurdig=1;ncurdig <= ncomputeto; ncurdig++)
12: nfactorial *= ncurdig;
13:
14: console.writeline("{0}! is {1}",ncomputeto, nfactorial);
15: }
16: }
当你象这样使用命令行执行程序时
factorial 2000
结果为0,什么也没有发生。因此,设想c#默默地处理溢出情况而不明确地警告你是安全的。
通过给整个应用程序(经编译器开关)或于语句级允许溢出校验,你就可以改变这种行为。以下两节分别解决一种方案。
7.1.1 给溢出校验设置编译器
如果你想给整个应用程序控制溢出校验,c#编译器设置选择是正是你所要找的。默认地,溢出校验是禁用的。要明确地要求它,运行以下编译器命令:
csc factorial.cs /checked+
现在当你用2000参数执行应用程序时,clr通知你溢出异常(见图 7.1)。
图 7.1 允许了溢出异常,阶乘代码产生了一个异常。
按ok键离开对话框揭示了异常信息:
exception occurred: system.overflowexception
at factorial.main(system.string&#;)
现在你了解了溢出条件引发了一个 system.overflowexception异常。下一节,在我们完成语法校验之后,如何捕获并处理所出现的异常?
7.1.2 语法溢出校验
如果你不想给整个应用程序允许溢出校验,仅给某些代码段允许校验,你可能会很舒适。对于这种场合,你可能象清单7.2中显示的那样,使用校验语句。
清单 7.2 阶乘计算中的溢出校验
1: using system;
2:
3: class factorial
4: {
5: public static void main(string&#; args)
6: {
7: long nfactorial = 1;
8: long ncomputeto = int64.parse(args�);(www.iocblog.net 文章来源)
9:
10: long ncurdig = 1;
11:
12: for (ncurdig=1;ncurdig <= ncomputeto; ncurdig++)
13: checked { nfactorial *= ncurdig; }
14:
15: console.writeline("{0}! is {1}",ncomputeto, nfactorial);
16: }
17: }
甚至就如你运用标志 checked-编译了该代码,在第13行中,溢出校验仍然会对乘法实现检查。错误信息保持一致。
显示相反行为的语句是非校验(unchecked )。甚至如果允许了溢出校验(给编译器加上checked+标志),被unchecked 语句所括住的代码也将不会引发溢出异常:
unchecked
{
nfactorial *= ncurdig;
}
7.2 异常处理语句
既然你知道了如何产生一个异常(你会发现更多的方法,相信我),仍然存在如何处理它的问题。如果你是一个 c++ win32 程序员,肯定熟悉seh(结构异常处理)。你将从中找到安慰,c#中的命令几乎是相同的,而且它们也以相似的方式运作。
the following three sections introduce c#'s exception-handling statements:
以下三节介绍了c#的异常处理语句:
。用 try-catch 捕获异常
。用try-finally 清除异常
。用try-catch-finally 处理所有的异常
7.2.1 使用 try 和 catch捕获异常
你肯定会对一件事非常感兴趣--不要提示给用户那令人讨厌的异常消息,以便你的应用程序继续执行。要这样,你必须捕获(处理)该异常。
这样使用的语句是try 和 catch。try包含可能会产生异常的语句,而catch处理一个异常,如果有异常存在的话。清单7.3 用try 和 catch为overflowexception 实现异常处理。 (www.iocblog.net 文章来源)
Tag: 异常处理
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。