C#之异常

本文详细介绍了C#中的异常处理机制,包括try块用于包含可能抛出异常的代码,catch子句处理不同类型的异常及其形式,如一般catch、特定catch和带条件的catch,最后讲解了无论是否发生异常都会执行的finally块。通过实例演示了如何优雅地应对运行时错误并确保程序稳定运行。
摘要由CSDN通过智能技术生成


什么是异常?
 异常是程序中的运行时错误,它违反了系统约束或应用程序约束,或是正常操作时不会发生的状况。比如用一个数除以0:

int a=1,b=0;
a/=b;
//程序将会终止,并提示一个未处理的异常:不能用0当除数。

什么是异常处理?
 在发生异常时,如果无法采取纠正措施,那么你的应用程序就应该被终止,因为在不稳定或未知的情况下继续运行程序,很有可能出现令人难以解决的bug。
 为了在程序发生异常时能够让程序继续运行下去,我们需要进行异常处理,通常的做法是:尽可能的采取纠正措施、记录有关异常的信息、清理任何外部资、向用户发送友好信息等。

try语句

 try语句用来指明为避免出现异常而被保护的代码段,并在异常发生时提供代码来处理。try语句由三个部分组成:

try块

 try块包含为避免出现异常而被保护的代码。在编写代码时,将可能会出现异常的代码放入到try块当中。比如用一个数除以0时会发生异常,可将处理代码放入到try块当中。

int a=1,b=0;
a/=b;

catch子句部分

 catch子句部分包含一个或多个catch子句,是处理异常的代码,也称为异常处理程序。当try块中发生异常时,catch子句捕获异常,不同形式的catch子句处理不同的异常。先来讲讲异常类的类型和catch子句的多种形式。

异常类

 程序运行时,可能会发生不同类型的异常,为此,BCL定义了多种异常类,每一个类代表一种指定的异常类型,当一个异常发生时,CLR创建该类型的异常对象,并找到合适的catch子句处理它。所有异常类都派生自System.Exception类,而System.Exception类派生自System.Object类。
 异常对象带有只读属性,其中常用的部分属性如下:

  1. Message,返回类型是string,解释异常原因的错误信息。
  2. StackTrace,返回类型是string,描述异常发生在何处的信息。
  3. InnerException,返回类型Exception,如果当前异常是由另外一个异常引起的,则这个异常包含前一个异常的引用。
  4. Source,返回类型是string,如果没有被应用程序定义的异常设定,那么这个属性含有异常所在的程序集的名称。

catch子句的四种形式

  1. catch { Statements } 一般catch子句:在catch关键字后没有参数列表;匹配try块中抛出的任何异常。
  2. catch ( ExceptionType ) { Statements } 特定catch子句:以一个异常类的名称作为单一参数,匹配任何指定类型的异常。
  3. catch ( ExceptionType ExceptionVariable ) { Statements } 带对象的特定catch子句:在异常名称之后包括一个标识符,该标识符在catch子句块中相当于一个局部变量,并称为异常变量,异常变量引用异常对象,并能用于访问该对象的信息。
  4. catch ( ExceptionType ExceptionVariable ) when ( predicate ) { Statements }带谓词的特定catch子句:在异常名称之后包含一个标识符;该标识符在catch子句中相当于一个局部变量,并称为异常变量;异常变量引用异常对象,并能用于访问关于该对象的信息;只有当谓词计算结果为true时,才能进入字句块,而且,谓词表达式中的任何异常都会被忽略,但表达式不能是异步的。
     catch可以同时存在多个,但只执行第一个匹配成功的子句。

finally块

 finally块包含无论异常是否发生都要执行的代码,即使try块中有return语句或在catch中抛出一个异常,finally块也总是在返回到调用代码之前执行,也就是说,进入了try语句,则try语句中的finally块都将被执行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值