C#中的异常处理

  通用语言运行时(CLR)具有的一个很大的优势,异常处理是跨语言被标准化的。一个在C#中所引发的异常可以在Visual Basic客户中得到处理。不再有 HRESULTs  或者 ISupportErrorInfo 接口。
  尽管跨语言异常处理的覆盖面很广,你稍为改变编译器的溢出处理行为,接着有趣的事情就开始了:你处理了该异常。要增加更多的手段,随后引发你所创建的异常。

  1.1  校验(checked)和非校验(unchecked)语句
  当你执行运算时,有可能会发生计算结果超出结果变量数据类型的有效范围。这种情况被称为溢出,依据不同的编程语言,你将被以某种方式通知——或者根本就没有被通知。
      那么,C#如何处理溢出的呢? 要找出其默认行为,请看下面的阶乘的例子。
      example 1.1     计算一个数的阶乘

Code


1.3  引发异常
    当你必须捕获异常时,其他人首先必须首先能够引发异常。而且,不仅其他人能够引发,你也可以负责引发。其相当
简单:

throw new ArgumentException("Argument can't be 5");
    你所需要的是throw 语句和一个适当的异常类。我已经从表7.1提供的清单中选出一个异常给这个例子。
    
    Runtime提供的标准异常

异常类型                                                        描述

Exception                                            所有异常对象的基类
SystemException                                      运行时产生的所有错误的基类
IndexOutOfRangeException                             当一个数组的下标超出范围时运行时引发
NullReferenceException                               当一个空对象被引用时运行时引发
InvalidOperationException                            当对方法的调用对对象的当前状态无效时,由某些方法引发
ArgumentException                                    所有参数异常的基类
ArgumentNullException                                在参数为空(不允许)的情况下,由方法引发
ArgumentOutOfRangeException                          当参数不在一个给定范围之内时,由方法引发
InteropException                                     目标在或发生在CLR外面环境中的异常的基类
ComException                                         包含COM 类的HRESULT信息的异常
SEHException                                         封装win32 结构异常处理信息的异常

    然而,在catch语句的内部,你已经有了随意处置的异常,就不必创建一个新异常。可能在上面的异常没有一个符
合你特殊的要求——为什么不创建一个新的异常?

1.3.1 重新引发异常
    当处于一个catch 语句的内部时,你可能决定引发一个目前正在再度处理的异常,留下进一步的处理给一些外部的
try-catch 语句。该方法的例子如 example 1.8所示。

example 1.8  重新引发一个异常

 

Code

NET技术C#中的异常处理,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。