程序运行的过程中,会发生各种非正常状况,比如程序运行时磁盘空间不足,网络连接中断,被操作的文件不存在。(异常在程序运行时发生)
针对这种情况下,C#程序引入了异常处理机制,通过异常处理机制对程序运行时出现的各种问题进行处理。
语法错误(编译错误)——编辑器
逻辑错误——程序调试
语义错误(运行错误)——异常处理
C#提供了大量的异常类,这些类都继承自Exception类。
Exception类是所有异常类的基类,它包含在System命名空间内,该类的对象可以捕获任何类型的异常,其他派生类的对象只能捕获相应类类型的异常。
- MemberAccessException:类型成员不能被访问
- ArgumentException:所有参数异常的基类
- ArgumentNullException:参数为空
- ArgumentOutOfRangeException:参数不在给定的范围内
- ArithmeticException:算术运算、类型转换或转换操作中的错误
- ArrayTypeMismatchException:与数组类型不匹配
- DivideByZeroException:除数为0
- FormatException:参数的格式不正确
- OutOfMemoryException: 内存不足
- OverflowException:数据溢出
- IndexOutOfRangeException:数组下标出界
- NullReferenceException:空对象被引用
- InvalidOperationException:方法调用对于对象的当前状态无效
每个异常对象都包含一些只读属性,这些属性可以描述异常的信息,通过这些属性可以更准确的找到异常出现的原因。
- Message string 此属性含有解释异常原因的消息
- StackTrace string 此属性含有描述异常发生在位置信息
- InnerException Exception 如果当前异常是由另一个异常引起的,此属性包含前一个异常的引用
- HelpLink string 此属性为异常原因信息提供URN或在RUL
- Source string 此属性含有异常起源所在的程序集的名称
try…catch 和 finally 及 throw
1、try…catch和finally
由于发生了异常程序会立即终止,无法继续向下执行了。C#程序中提供了一种对异常进行处理的方式——异常捕获。
try
{
//程序代码块(可能出现问题的代码块)
}
catch(ExceptionType e)//可以是Exception类及其子类
{
//对异常的处理
}
try代码块:用于处理可能发生的异常语句,catch代码块中是针对异常进行处理的语句。当try代码块中的语句发生了异常,就会交给catch块进行匹配
在C#中catch代码块有三种形式,分别用于处理不同级别的异常
- 一般的catch代码块:catch后面没有任何内容,可以匹配try代码块中任意类型的异常。 </