1
2
3
4
5
6
7

异常处理

发布时间:2018-12-15 16:13   发布人:焦卫峰   浏览次数:510

1.什么是异常

异常(Exception)就是程序执行期间发生的问题。无论编程技术有多好,程序都难免

出现异常情况。

如输入了非法数据,要读取的文件不存在等等。

C#提供了一套完美的方案,在程序主线之外处理异常,不但使程序更加健壮、更加容错,而且保持了程序结构的清晰。

2.try-catch结构

一般情况下我们需要对异常情况进行处理,这时就需要捕获并处理异常。在 C#中用try-catch 结构捕获并处理异常。

格式:

try{

可能出现异常的语句;

}

catch(异常类 异常类对象){

异常发生后的处理代码;

}

……

finally{

不论是否出现异常,都要执行的语句;

}

说明:

1.try 块后面至少要有一个 catch 块或者finally 块,finally 块必须放在最后。

2.有多个 catch 块时,要按从具体到一般的顺序由上往下排列,基类必须放在最后,否则捕捉派生类异常的 catch 块永远没机会被执行。

3.catch块后面的参数可以只有类没有对象;还可以不给 catch 块指定异常类型,这时它可以捕获任何异常。

3. 抛出异常throw

.NET 可以自动检测并抛出常见异常,但有时需要人工抛出异常。

系统引发异常:在执行C#语句和表达式的过程中,有时会出现一些例外情况,使某些操作无法正常完成,此时就会引发一个异常。对程序来说,这种异常是被动地发生的。

主动引发异常:使用throw语句来立即、无条件地引发异常。控制永远不会到达紧跟在throw后面的语句。对程序来说,主动地检查到了错误或者意外事件,因此引发了一个异常来通知用户或者调用代码。

throw new XXXException();

4.常用的异常类

异常类Exception中比较重要的两个属性是 Message 和 StackTrace。属性 Message 用于描述异常的原因,属性 StackTrace 用于描述异常的堆栈信息,即发生异常的位置。

 

Exception

SystemException

ArgumentException

处理参数无效的异常

ArgumentNullException

ArgumentOutOfRangeException

FormatException

处理参数格式错误的异常

MemberAccessException

处理访问类的成员失败时所引发的异常

FieldAccessException

访问字段成员失败

MethodAccessException

访问方法成员失败

MissingMemberException

成员不存在

IndexOutOfRangeException

下标超出了数组长度

ArrayTypeMismatchException

数组中存储数据类型不正确的元素所引发的异常

RankException

数组维数错误

IOException

处理进行文件输入输出操作时所引发的异常

 

这个类在System.IO命名空间中

DirectoryNotFoundException

FileNotFoundException

FileLoadException

无法加载文件

PathTooLongException

EndOfStreamException

已经到达流的末尾而还要继续读数据

ArithmeticException

算术运算相关异常类

DivideByZeroException

OverflowException

ApplicationException

该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)

 

5.自定义异常

创建自己的异常时,用户定义的异常类的名称通常需要以“Exception”结尾,一般从ApplicationException类派生,并实现三个常见的构造函数。