C#之异常处理

软件运行过程中,如果出现了软件正常运行不应该出现的情况,软件就出现了异常。这时候我们需要去处理这些异常。或者让程序终止,避免出现更严重的错误。或者提示用户进行某些更改让程序可以继续运行下去。C#编程语言本身就为我们提供了这种异常处理机制。

常见异常的类型:

在.Net类库中,提供了针对各种异常情形所设计的异常类,这些异常类都是System.Exception 直接或间接子类。

常见异常的类型
System.Exception    最泛化的异常,其他所有异常类型都从它派生。
System.ArgumentException:  传给方法的一个参数无效。
System.ArgumenNullException: 一个不应该为null的参数为null。
System.ApplicationException: 一个自定义的应用程序异常,开发者可以用它标识特殊的非致命的应用程序错误。
System.FormatException:参数格式不符合调用的方法的参数规范。
System.IndexOutOfRangeException:试图访问一个不存在的数组元素。
System.InvalidCastException: 因无效的类型转换或显示转换引发的异常。
System.NotImplementdeException:虽然找到了方法签名,但该方法尚未完全实现。
System.NullReferenceException: 试图访问尚未包含任何数据的一个变量(一般是调用其值为null的一个对象的成员是引发)。
System.ArithemeticException: 发生了一个无效的数学运算,但其中不包括被零除。
System.ArrayTypeMismatchException:试图将类型有误的元素存储到数组中。
System.StackOverFlowException:通常意味着一个无限循环,方法不停地回调自身(成为递归)

异常对象常见属性:
string Message:含有解释异常原因的消息
string StackTrace:含有描述异常发生在何处的信息
Exception InnerException:若当前异常是由另一个异常引起的,此属性包含前一个异常的引用

异常处理语句:

1、try...catch 语句
作用:指明可能发生异常的代码块,并提供代码处理异常。
组成:try块:将可能引发异常的代码用try块包围起来。try关键字告诉编译器:开发者认为块中的代码有可能引发一个异常;如果真的引发了异常,那么某个catch块就要尝试处理这个异常。

基本格式:

try
{
  被监控的代码
}
catch(异常类名 异常类变量)
{
   异常处理
}

注意:在catch子句中,异常类名必须是System.Exception或从System.Exception派生的类型,当catch字句指定了异常类名和异常变量名后,就相当于声明了一个具有给定名称和类型的异常处理,此异常变量表示当前整你在处理的异常。

2、try ...catch...finally 语句

将finally语句与try...catch语句结合,形成try ...catch...finally 语句。finally语句同样以区块方式存在,它被放在所有try...catch语句的最后面,程序执行完毕,最后都会调到finally语句区块,执行其中的代码。无论程序是否产生异常,最后都会执行finally语句区块中的程序代码。

基本格式:

try
{
  被监控的代码
}
catch(异常类名 异常类变量)
{
   异常处理
}

3、throw语句

throw 语句用于主动引发一个异常,使用throw语句可以在特定的情形下,自行抛出异常。

通常throw语句与try...catch 或 try...finally语句一起使用。
两种形式:
     throw  ExceptionObject;在try块中使用,执行throw语句后,try块中在throw语句之后的语句跳过不执行
     throw;仅在catch语句中使用。重新抛出当前异常,系统继续它的搜索,寻找另外的catch块。

示例:
 

例1:static void main()                                                                  
{
   try                                                                                               
  {
             Console.WriteLine("begin  executing");
             Console.WriteLine("throw exception");
             throw new Exception ("Arbitrary exception");
             Console.WriteLine("end executing ");
   }
    catch( FormatException exception)
   { Console.WriteLine("a FormatException was thrown");        throw;//重新引发一个异常}
     catch( Exception exception)
   { Console.WriteLIne ("Unexception error:{0}",exception.Message );}
     catch         {Console.WriteLIne("unexcepted error!")}
  Console.WriteLine("shutting  down ....")
}
输出结果:
begin executing
throw exception
Unexception error:Arbitrary exception
shutting  down.......//这个程序没有finally块,所以它随后会执行try/catch块之后的System.Console.WriteLine()语句。

小结:异常是专为跟踪例外的,事先没有预料的,而且可能造成严重后果的情况设计的。预料之中的情况使用异常,会造成你的代码难以阅读,理解和维护。除此之外,c#在抛出异常时会产生些许性能损失。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值