将不确定变为确定~异常被抛出的顺序
回到目录
在程序中,为了保正代码的严禁性我们会在需要的地方加个try...cache块,作用是对一个已知或者未知的异常进行捕获,这是正常的,任何一种面向对象的语言都提供了这个基础的功能,C#也不例外,事实上这篇文章的重要是,对于比较深度的方法调用中,异常被抛出的顺序。
下面代码块中,WEB层调用BLL层方法,而BLL层方法去调用DAL层方法,而在这三个层的三个方法中都加了try...catch块,而在BLL与DAL中我会故意让程序产生一个已知的异常,并进行捕获,最后进行日志的写入。
看代码:
1 static void DAL()
2 {
3 int a = 0;
4 try
5 {
6 int b = 1 / a;
7 }
8 catch (Exception e)
9 {
10
11 ErrMsg.Append(e.Message);
12
13 }
14 }
15
16 static void BLL()
17 {
18 try
19 {
20 DAL();
21 test t = null;
22 Console.WriteLine(t.nam);
23 }
24 catch (Exception e)
25 {
26
27 ErrMsg.Append(e.Message);
28 }
29 }
30
31 static void WEB()
32 {
33 try
34 {
35 BLL();
36 }
37 catch (Exception e)
38 {
39
40 ErrMsg.Append(e.Message);
41 }
42
调用代码:
static void Main(string[] args)
{
WEB();
Console.WriteLine(ErrMsg.ToString());
}
结果如下:
从结果上看出,异常是按着产生的顺序而依次被记录的。
而别一种情况,如果我们不去捕获异常,它是否可以自己捕获呢?答案是否定的,它当然不能捕获,呵呵!
1 static void DAL()
2 {
3 int a = 0;
4 try
5 {
6 int b = 1 / a;
7 }
8 catch (Exception e)
9 {
10
11 //ErrMsg.Append(e.Message);
12
13 }
14 }
15
16 static void BLL()
17 {
18 try
19 {
20 DAL();
21 test t = null;
22 Console.WriteLine(t.nam);
23 }
24 catch (Exception e)
25 {
26
27 // ErrMsg.Append(e.Message);
28 }
29 }
30
31 static void WEB()
32 {
33 try
34 {
35 BLL();
36 }
37 catch (Exception e)
38 {
39 ErrMsg.Append(e.Message);
40 }
41
结果如下:
回到目录
作者:仓储大叔,张占岭,
荣誉:微软MVP
版权声明
本文仅代表作者观点,不代表博信信息网立场。