huankfy

明月出天山,苍茫云海间

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  12 随笔 :: 16 文章 :: 24 评论 :: 0 引用

公告

Assert用于检查不应该发生情况,用来帮助开发人员对问题的快速定位。异常处理用于对程序发生异常情况的处理,增强程序的健壮性、容错性,减少程序使用中对用户不有好的行为,不让(通常也不必)用户知道发生了什么错误。

实际开发中,我们通常将Assert与异常混淆, 不知道什么时候使用Assert,什么时候使用异常处理。或者不用Assert,将一切情况都归为异常。这样一来,就掩盖了问题,当问题发生的时候,很难进行定位,而这些问题本该是在开发的时候就解决掉的。同时,也增加了开销(在c#中,debug.Assert()编译成release版本时,不会产生任何代码,而try/catch在debug/release版本中都是有代码产生,运行时需要开销)。

考虑下面这个程序 :

代码

 1 public static bool ParseData(string xmlPath, MyDataCollection container) {
 2       Debug.Assert(container==null"container argument is null");
 3 
 4       XmlDocument xmlDoc = new XmlDocument();
 5       try {
 6           xmlDoc.Load(xmlPath);
 7           // TO DO : parse data from xml to contianer
 8       }
 9       catch (FileNotFoundException) { 
10           // TO DO :handle exception
11       }
12       catch (XmlException) {
13           // TO DO :handle exception
14       }
15 }

 

  我们需要在调用的时候,确保参数container不为null。如果发布成公共类库,那么应该做异常处理,确保第三方错误调用的时候,知道问题在哪。

关于异常处理, 在编写代码的时候,应充分考虑各种具体异常,而不简单的catch到Exception,写出更健壮的代码。

通常来说,能够用Assert的地方,都可以用try/catch处理 。但这不是好习惯。或许你可能认为,程序release后,try/catch也就比Assert多出那么点开销,对现代的机器而言微不足道,那的确很对。为什么不认真对待自己写出来的代码呢?

posted on 2010-02-11 10:16 huankfy 阅读(...) 评论(...)  编辑 收藏