写点什么

C#入门系列 (三十) -- 异常处理

作者:陈言必行
  • 2022 年 7 月 25 日
  • 本文字数:1582 字

    阅读完需:约 5 分钟

概念


  异常是程序运行中发生的错误,异常处理是程序的一部分,错误的出现并不总是编写应用程序员的原因,有事应用程序会因为终端用户的操作而发生错误。无论如何,在编写程序前都应该预测应用程序和代码中出现的错误。


C# 异常处理时建立在四个关键词之上的:trycatchfinally 和 throw


  • try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块

  • catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获

  • finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭

  • throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。



三种异常的处理语句

  1. try ... catch //捕获异常

  2. try ... finally //清除异常

  3. try ... catch ... finally // 处理所有异常


一般语法:


try{    //包含容易产生异常的代码}catct(异常类 ,异常实例对象){    //异常处理代码}
复制代码


代码示例:利用 try catch 语句捕获数组越界问题


namespace 捕获异常{    class Program    {        static void Main(string[] args)        {            //利用 try catch 语句捕获数组越界问题            int[] arr = { 0, 1, 2, 3, 1, 2, 3, 3, 4, 5 };            try            {                for (int i = 0; i <= arr.Length; i++)                {                    Console.Write(arr[i] + " ");                }            }            catch(Exception myex)            {                //Message.Tostring()中的Message是获取描述当前异常消息                Console.WriteLine(myex.Message.ToString());            }            //此语句虽然可以给出异常提示,并不能智能描述异常的原因            catch             {               Console.WriteLine("发生异常");                        }                        Console.ReadKey();        }    }}
复制代码


用户不能获得对异常对象的访问,而该对象含 有重要的出错星星,也就不能得到出错的信息。


清除、处理所有异常


如果用户对产生错误不进行处理,而消除产生的错误分配的资源


try{   // 包含容易产生异常的代码}finally{   // 用于消除try 块中分配的任何资源以及    // 运行任何即使在发生异常时也必须执行的代码}
复制代码


最好的组合,合并两种错误处理技术,即捕获错误、消除并继续执行应用程序


try{     // 包含容易产生异常的代码}catct(异常类 ,异常实例对象){     // 异常处理代码}finally{     // 用于消除try 块中分配的任何资源以及      // 运行任何即使在发生异常时也必须执行的代码}
复制代码


注意:处理异常会大大地降低性能,不妥将他用在控制正常程序流程中,如采用有可能检测到代码中 导致异常的状态,请执行这种操作。 不妥在处理该状态之前捕获异常本是,如除一个数时,可通过 if 先判断数据不等 0,然后在进行相除。


引发异常:在编写程序是,有事肯要引发异常,以便捕获异常引发异常的格式为:throw new 异常类(异常信息);异常类 :预定义,自定义异常信息:字符串“格式转换错误”

预定义异常类


  • Exception:所有异常对象的基类

  • SystemException:运行时产生的所有错误的基类

  • IdexOutOfRangeExceptiom:当数组的下标超出范围时运行时引发

  • NullRefereceException:当一个空对象被引用时运行时引发

  • ArgunmentException:所有参数异常的基类

  • InvalidCastException:类型的显示转换在运行是失败时,就会引发异常

  • ArrayTypeMismathException:当存储一个数组是,如果由于被存储的元素实际类型与数组的实际类型不兼容而导致存储失败就会引发此异常

  • ArithmeticException:算术运算期间异常发生的基类

  • DivideByZeroException:试图除以 0 引发

  • OverflowException:溢出时引发

  • FormatException:参数格式无效是引发

发布于: 2 小时前阅读数: 7
用户头像

陈言必行

关注

公号:开发同学留步 2019.03.12 加入

我是一个从事Unity游戏开发攻城狮,6年开发经验,助你日常不加班。

评论

发布
暂无评论
C#入门系列(三十) -- 异常处理_七月月更_陈言必行_InfoQ写作社区