http://www.runoob.com/csharp/csharp-exception-handling.html
@1:try - catch
Exception类几个常用属性的示例: TargetSite, StackTrace, Source
1 namespace _20130405
2 {
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 Loop:
8 try
9 {
10 Console.WriteLine("Input Intager One:");
11 int x = Convert.ToInt32(Console.ReadLine());
12 Console.WriteLine("Input Intager Two:");
13 int y = Convert.ToInt32(Console.ReadLine());
14 Console.WriteLine("x / y = {0}", x / y);
15 }
16 catch (FormatException format)
17 {
18 //Console.WriteLine(format.Message);
19 Console.WriteLine(format.TargetSite); //捕获引发当前异常的方法
20 Console.WriteLine();
21 Console.WriteLine();
22 Console.WriteLine(format.StackTrace); //捕获当前异常发生所经历的方法的名称和签名
23 Console.WriteLine();
24 Console.WriteLine();
25 Console.WriteLine(format.Source); //捕获或设置导致错误的应用程序或对象的名称
26 Console.WriteLine();
27 Console.WriteLine();
28 /*
29 Input Intager One:
30 1.0
31 Void StringToNumber(System.String, System.Globalization.NumberStyles, NumberBuff
32 er ByRef, System.Globalization.NumberFormatInfo, Boolean)
33
34
35 在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffe
36 r& number, NumberFormatInfo info, Boolean parseDecimal)
37 在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo in
38 fo)
39 在 System.Convert.ToInt32(String value)
40 在 _20130405.Program.Main(String[] args) 位置 F:\2013\20130405\20130405\Progr
41 am.cs:行号 17
42
43
44 mscorlib
45 */
46 }
47 catch (DivideByZeroException zero)
48 {
49 //Console.WriteLine(zero.Message);
50 Console.WriteLine(zero.TargetSite);
51 Console.WriteLine();
52 Console.WriteLine();
53 Console.WriteLine(zero.StackTrace);
54 Console.WriteLine();
55 Console.WriteLine();
56 Console.WriteLine(zero.Source);
57 Console.WriteLine();
58 Console.WriteLine();
59 /*
60 Input Intager One:
61 1
62 Input Intager Two:
63 0
64 Void Main(System.String[])
65
66
67 在 _20130405.Program.Main(String[] args)
68
69
70 20130405
71 */
72 }
73 catch (Exception e)
74 {
75 //当捕获多个异常时,若两个catch块的异常类存在继承关系,则要先捕获派生类的异常,再捕获基类的异常.
76 //否则,捕获派生类异常的catch块将不起作用,并且会在编译时报错. 所以此处的这个catch必须放在三个
77 //catch中的最后
78 Console.WriteLine(e.Message);
79 }
80
81 goto Loop;
82 }
83 }
84 }
@2:try - finally
在执行时,若没有发生异常,try - finally语句将按正常方式执行,若try块内存在异常,则将在执行完finally块后,抛出异常.
finally块用于清除try块中分配的任何资源,以及执行 即使发生异常也必须执行的 代码.
@3:try - catch - finally
在异常处理中最多只能有一个finally块!
1 static void Main(string[] args)
2 {
3 int sum = 0;
4 try
5 {
6 int[] a = {1, 3, 4, 5, 6};
7 for (int i = 0; i < 6; ++i)
8 {
9 sum += a[i];
10 }
11 Console.WriteLine("try中的:sum = {0}", sum); //这条语句没有执行
12 //如果try块中出现了异常,则程序终止try块的语句,进入catch块, 所以此处没有进行输出.
13 }
14 catch (ArgumentOutOfRangeException argu)
15 {
16 Console.WriteLine(argu.Message);
17 }
18 catch (Exception e)
19 {
20 Console.WriteLine(e.Message);
21 }
22 finally
23 {
24 Console.WriteLine("finally中的:sum = {0}", sum);
25 }
26 Console.ReadLine();
27 /*运行结果:
28 索引超出了数组界限。
29 finally中的:sum = 19
30 */
31 }
@4:throw语句用于发出 在程序执行期间出现异常情况 的 信号.
throw 表达式;
其中表达式必须表示一个Exception类或它的派生类型,也可以在throw语句后没有表达式,表示将异常再次抛出.
1 static void Main(string[] args)
2 {
3 int i = 0;
4 int count = 3;
5 Console.WriteLine("Please Input the KeyWord:");
6
7 try
8 {
9 while (Console.ReadLine() != "wxy")
10 {
11 Console.WriteLine("Wrong KeyWord!");
12
13 i++;
14 if (i >= count)
15 throw (new Exception("Over 3 times! Quit!"));
16 Console.WriteLine("Please Input the KeyWord:");
17 }
18 Console.WriteLine("Success!");
19 }
20 catch (Exception e)
21 {
22 Console.WriteLine(e.Message);
23 }
24 Console.ReadLine();
25
26 /*
27 Please Input the KeyWord:
28 1
29 Wrong KeyWord!
30 Please Input the KeyWord:
31 2
32 Wrong KeyWord!
33 Please Input the KeyWord:
34 3
35 Wrong KeyWord!
36 Over 3 times! Quit!
37 */
38 }
@5:自定义异常类:
对于自定义的异常要在出现异常时使用throw关键字来引发异常.
自定义异常类继承于System.ApplicationException类,该类是区别于异常是系统定义的还是用户自定义的.
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 int age = 209;
6 try
7 {
8 if (age < 0 || age > 200)
9 throw (new MyException("年龄超范围", age));
10 }
11 catch (MyException ex)
12 {
13 Console.WriteLine("catch块: {0}", ex.MyMessage);
14 }
15
16 Console.WriteLine("age = {0}", age);
17 Console.WriteLine("END!");
18 Console.ReadLine();
19 /*
20 自定义错误:
21 年龄不能大于200
22 catch块: 应用程序中的错误。
23 age = 209
24 END!
25 */
26 }
27
28 }
29 class MyException : ApplicationException
30 {
31 private string myMessage;
32 public string MyMessage
33 {
34 get { return myMessage; }
35 set
36 {
37 myMessage = Message;
38 //myMessage = value; //Message
39 }
40 }
41 public MyException(string str, int value)
42 {
43 MyMessage = str;
44 Console.WriteLine("自定义错误:");
45 if (value < 0)
46 Console.WriteLine("年龄不能小于0");
47 else
48 Console.WriteLine("年龄不能大于200");
49 }
50 }