首页 > 代码库 > C#异常处理匹配顺序

C#异常处理匹配顺序

使用try和catch并finally关键字,再次主要记录一下有些比较特别的异常处理。

示例:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace ExceptionTest 8 { 9     class Program10     {11         static void Main()12         {13             MyClass my = new MyClass();14             try15             {16                 my.A();17             }18             catch(DivideByZeroException e)19             {20                 Console.WriteLine("catch in Main");21             }22             finally23             {24                 Console.WriteLine("finally catch on Main");25             }26 27             Console.ReadKey();28         }29     }30     class MyClass31     {32         public void A()33         { 34             try35             { 36                 B(); 37             }38             catch(System.NullReferenceException)39             {40                 Console.WriteLine("catch ex in A()"); 41             }42             finally43             {44                 Console.WriteLine("finally catch in A()");45             }46         }47         public void B()48         {49             int x = 10;50             int y = 0;51             try52             {53                 x /= y;54             }55             catch(System.IndexOutOfRangeException)56             {57                 Console.WriteLine("catch in B()");58             }59             finally60             {61                 Console.WriteLine("finally in B()");62             }63         }64     }65 }

 

可以看见,在Main捕获A()的异常,在A()捕获的是B()的异常。因此,当执行到B中异常的查找顺序为,按照方法执行的堆栈查找,如下

 

找到之后,看是执行程序代码,按照正常顺序执行,就是从栈中取B执行,然后取A,最后取Main,执行结果就是这样:

 

输出结果是:

C#异常处理匹配顺序