首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 正文

展现C#世界之七:异常处理

  显示相反行为的语句是非校验(unchecked )。甚至如果允许了溢出校验(给编译器加上checked+标志),被unchecked 语句所括住的代码也将不会引发溢出异常:

  unchecked

  {

  nFactorial *= nCurDig;

  }

  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 对象给一个方法,也不能赋给它一个不同的值。

上一页  [1] [2] [3] [4] [5] 下一页

【责编:John】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 社区讨论
 博客论点
 Dotnet频道相关导航