7.2 异常处理语句 既然你知道了如何产生一个异常(你会发现更多的方法,相信我),仍然存在如何处理它的问题。如果你是一个 C++ WIN32 程序员,肯定熟悉SEH(结构异常处理)。你将从中找到安慰,C#中的命令几乎是相同的,而且它们也以相似的方式运作。 The following three sections introduce C#'s exception-handling statements: 以下三节介绍了C#的异常处理语句: 。用 try-catch 捕获异常 。用try-finally 清除异常 。用try-catch-finally 处理所有的异常 7.2.1 使用 try 和 catch捕获异常 你肯定会对一件事非常感兴趣——不要提示给用户那令人讨厌的异常消息,以便你的应用程序继续执行。要这样,你必须捕获(处理)该异常。 这样使用的语句是try 和 catch。try包含可能会产生异常的语句,而catch处理一个异常,如果有异常存在的话。清单7.3 用try 和 catch为OverflowException 实现异常处理。 清单7.3 捕获由Factorial Calculation引发的OverflowException 异常 1: using System; 2: 3: class Factorial 4: { 5: public static void Main(string[] args) 6: { 7: long nFactorial = 1, nCurDig=1; 8: long nComputeTo = Int64.Parse(args[0]); 9: 10: try 11: { 12: checked 13: { 14: for (;nCurDig <= nComputeTo; nCurDig++) 15: nFactorial *= nCurDig; 16: } 17: } 18: catch (OverflowException oe) 19: { 20: Console.WriteLine("Computing {0} caused an overflow exception", nComputeTo); 21: return; 22: } 23: 24: Console.WriteLine("{0}! is {1}",nComputeTo, nFactorial); 25: } 26: } 为了说明清楚,我扩展了某些代码段,而且我也保证异常是由checked 语句产生的,甚至当你忘记了编译器设置时。 正如你所见,异常处理并不麻烦。你所有要做的是:在try语句中包含容易产生异常的代码,接着捕获异常,该异常在这个例子中是OverflowException类型。无论一个异常什么时候被引发,在catch段里的代码会注意进行适当的处理。 如果你不事先知道哪一种异常会被预期,而仍然想处于安全状态,简单地忽略异常的类型。 try { ... } catch { ... } 但是,通过这个途径,你不能获得对异常对象的访问,而该对象含有重要的出错信息。一般化异常处理代码象这样: try { ... } catch(System.Exception e) { ... } 注意,你不能用ref或out 修饰符传递 e 对象给一个方法,也不能赋给它一个不同的值。  
2/2 首页 上一页 1 2 |