本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
7.3 引发异常 当你必须捕获异常时,其他人首先必须首先能够引发异常.而且,不仅其他人能够引发,你也可以负责引发.其相当简单: throw new ArgumentException( "Argument can't be 5" ); ?
你所需要的是throw 语句和一个适当的异常类.我已经从表7.1提供的清单中选出一个异常给这个例子. 表 7.1 Runtime提供的标准异常
异常类型 描述 Exception 所有异常对象的基类 SystemException 运行时产生的所有错误的基类 IndexOutOfRangeException 当一个数组的下标超出范围时运行时引发 NullReferenceException 当一个空对象被引用时运行时引发 InvalidOperationException 当对方法的调用对对象的当前状态无效时,由某些方法引发 ArgumentException 所有参数异常的基类 ArgumentNullException 在参数为空(不允许)的情况下,由方法引发 ArgumentOutOfRangeException 当参数不在一个给定范围之内时,由方法引发 InteropException 目标在或发生在CLR外面环境中的异常的基类 ComException 包含COM 类的HRESULT信息的异常 SEHException 封装win32 结构异常处理信息的异常
然而,在catch语句的内部,你已经有了随意处置的异常,就不必创建一个新异常.可能在表7.1 中的异常没有一个符合你特殊的要求——为什么不创建一个新的异常?在即将要学到小节中,都涉及到这两个话题. 7.3.1 重新引发异常 当处于一个catch 语句的内部时,你可能决定引发一个目前正在再度处理的异常,留下进一步的处理给一些外部的try-catch 语句.该方法的例子如 清单7.8所示. 清单 7.8 重新引发一个异常 1: try 2: { 3: checked 4: { 5: for ( ; nCurDig <= nComputeTo; nCurDig++ ) 6: nFactorial *= nCurDig; 7: } 8: } 9: catch ( OverflowException oe ) 10: { 11: Console.WriteLine( "Computing {0}caused an overflow exception", nComputeTo ); 12: throw; 13: } 注意,我不必规定所声明的异常变量?gt;」芩强裳〉?但你也可以这样写: throw oe; 现在有时还必须留意这个异常.
本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
|