首页 > 代码库 > 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#异常处理匹配顺序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。