.NET中异常处理的几个误区

有些人认为下面代码就是一个catch的错误用法:

catch(Exception e)
{
   throw e;
}

首先说明,这不是一个错误用法,但是通常来讲,我们应该避免这种代码。然后要说明的是,这段代码有一个比较典型的作用就是改变异常出现的位置,也就是可以对某类异常统一在一个位置处理。先看下面代码:

public int GetAllCount2()
   {
     try
     {
       openDB();
       int i = 1;
       return i;
     }
     catch (SqlException sex)
     {
       throw sex;
     }
     catch (Exception ex)
     {
       throw ex;
     }
   }
   public int GetAllCount()
   {
     openDB(); // 这里也可能是微软企业类库等
     int i = 1;
     return i;
   }
   private void openDB()
   {
     conn.Open();
   }

假设我们有一个公用方法叫openDB(),而很多方法中调用它,当数据库打开失败的时候,对于调用GetAllCount方法,异常将定位于conn.Open而如果调用GetAllCount2,那么异常定位于throw sex的位置,同时堆栈信息也有所不同,可以更快捷的找到调用方法的位置,也可在此位置进行一些错误恢复处理。尤其是我们编写一些底层类库的时候,比如Framework类库从不会把异常代码定位到Framework类库内部的某个方法上面。但是需要注意的是我们尽量避免捕获异常而不返回,例如:

catch(){}

这样的使用就是典型的错误使用了,因为对于Framework来讲,任何时候系统都可能抛出一个StackOverflowException或者OutOfMemoryExcetpion而上面这段代码则隐藏了这些异常,有时候则导致一些严重的问题。

时间: 2024-11-08 23:20:58

.NET中异常处理的几个误区的相关文章

java基础-求问关于java中异常处理的问题。。

问题描述 求问关于java中异常处理的问题.. 不是很理解java异常处理中的try catch语句块,比如说我的catch语句块中是一个System.out.println("caught IOEexception":e.getMessage()),那么这个catch语句起到的作用就是提示我一下哪个地方有异常吗?然后我再去它提示我发生异常的地方去修改我的程序? 那么如果我的catch语句里面什么都没写,只是一个catch{}:由于写了try catch语句块编译一定会通过,那岂不是说

php中异常处理方法小结_php技巧

本文实例总结了php中异常处理方法.分享给大家供大家参考.具体分析如下: 当异常被触发时,通常会发生:在PHP5中添加了类似于其它语言的错误异常处理模块.在 PHP代码中所产生的异常可被 throw语句抛出并被 catch 语句捕获.需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常.每一个 try 至少要有一个与之对应的 catch. 使用多个 catch 可以捕获不同的类所产生的异常,当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP

程序报错-ios程序中异常处理问题

问题描述 ios程序中异常处理问题 [NSCFconstantString isResizable],这个异常要怎么解决,这是我用NSString类型给UIImage赋值时出现的错误 解决方案 http://www.cocoachina.com/ios/20141229/10787.html 解决方案二: 具体代码怎么写的, UIImage.image = UIImage("named": xxx) 解决方案三: http://www.cocoachina.com/ios/201412

外包企业在信息安全管理中易犯的一些误区(1)

以下的文章主要向大家讲述的是外包企业在信息安全管理中的一些误区,自从商务部推出服务外包"大气势工程"之后,在政府政策的大力扶持之下,国内外包产业发展的如雨后春竹,为了能够承接更多高端服务.满足客户的要求,商务部同时鼓励外包企业通过国际认证以获得更好的竞争力和良好的企业形象.比特网专家特稿:自从商务部推出服务外包"千百十工程"之后,在政府政策的大力扶持之下,国内外包产业发展的如火如荼,为了能够承接更多高端服务,满足客户的要求,商务部同时鼓励外包企业通过国际认证以获得更

浅谈网站建设中常见的五种误区

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 大家都知道网站建设相对网站推广来说是比较简单的,因为现在利用CMS系统能够很容易的架构起来一个功能非常足的网站,但是如果把这个网站推广出去却变得非常的困难,实际上在网站建设的时候只要避免下面的五种误区就能够增加推广的效果,甚至能够起到事半功倍的作用,下面我们就来介绍网站建设中常见的五种误区! 一:友情链接的误区 友情链接对于一个网站来说是非常

SQL server 2005中异常处理消息框可直接使用

使用了一段时间的SQL2005之后,发现里面的异常处理消息框(ExceptionMessageBox)功能很不错. 以关联相应帮助,复制到剪贴板或者是查看详细的技术信息 分析了一下相关文件,发现这个功能包含在C:Program FilesMicrosoft SQL Server90Shared目录下的Microsoft.NetEnterpriseServers.ExceptionMessageBox.dll中,可以在.net工程中直接引用,调用示例如下: 示例1 try{ string[] aa

在“用户体验”中做好优化的五大误区

"优化",成为一个后搜索引擎时代中的热词.而百度作为搜索引擎中的巨鳄,在其头上优化的"草民"越来越多.当然,为了避免过渡商业性的优化,给网络用户带来不利的影响,百度开始进行网络整顿.因此,"用户体验"开始成为百度算法的"亲爹". 那么,在百度一而再,再而三提倡"用户体验"的情况下,又该怎么做好优化呢?当然,不少的网络推广专家开始研究起了"热词"营销,"热站"辅助的方法

ASP.NET中异常处理使用(详细)

asp.net|异常处理    通用语言运行时(CLR)具有的一个很大的优势为,异常处理是跨语言被标准化的.一个在C#中所引发的异常可以在Visual Basic客户中得到处理.不再有 HRESULTs  或者 ISupportErrorInfo 接口.    尽管跨语言异常处理的覆盖面很广,但这一章完全集中讨论C#异常处理.你稍为改变编译器的溢出处理行为,接着有趣的事情就开始了:你处理了该异常.要增加更多的手段,随后引发你所创建的异常. 7.1  校验(checked)和非校验(uncheck

Java编程中异常处理的优劣之道

Java编程中的异常处理是一个很常见的话题了,几乎任何一门介绍性的Java课程都会提到异常处理.不过,我认为很多人其实并没有真正掌握正确处理异常情况的方法和策略,最多也就不过了解个大概,知道点概念.本文就对三种不同程度和质量的Java异常处理进行了讨论,所阐述的处理异常的方式按手法的高下分为: 好,不好和恶劣三种. 同时向你提供了一些解决这些问题的技巧. 首先解释一些java异常处理中必须搞清楚的定义和机制.Java语言规范将自Error类或RuntimeException类衍生出来的任何违例都