要包装一个异常,你应该把它指定为新异常的内部异常然后抛出这个新的异常。这个实践应该只在原始异常不能够为接收者传达足够含意,或者该异常的调用堆栈是令接收者费解的或者是没有兴趣的情形之下才被使用。例如,考虑一个为了管理基于 XML 的配置文件而提供了功能的库。其中,配置文件管理器使用一个 XML 读取器来读取文件。如果某个配置文件拥有错误的格式,那么 XML 读取器就可以抛出一个为 XML 读取器和它所支持的类型而包括了一条消息和调用堆栈细节的异常,并且这个被抛出的异常对于应用程序的用户来说是毫无意义的。因此,在这种情节中就比较适合为配置文件管理器而包装 XML 读取器的异常并且重新抛出一个以真实自然的方式来表述问题的新异常。

下列指导方针有助于确保你在适当的时候正确地对异常进行包装。

考虑把从底层中被抛出的特殊异常包装到一个更加适当的异常中,如果底层异常在高层操作的环境中没有任何意义。

这种情况应该是很少出现的,因为它会让调试变得更加困难。但是在你能够确定底层异常从来都不是真实的错误来源的时候,这样做是合适的。

避免捕获并且包装非特殊的异常。

这个实践应该是被避免的,因为它会对错误进行隐藏。遵循这个规则的异常就有可能包括这样一种情况:包装者异常传达了一个比原始异常的实际类型更加能够吸引调用者的苛刻条件。例如,TypeInitializationException 异常就包装了所有从静态构造器中被抛出的异常。

在包装异常的时候指定内部的异常。

这有助于通过工具来显示问题的底层细节并且能够有助于代码的调试。下列代码范例就示范了一个异常的包装。

C#
public void SendMessages()
{try {  EstablishConnection();}catch (System.Net.Sockets.SocketException e){throw new CommunicationFailureException("Cannot access remote computer.",e);}
}

转载于:https://www.cnblogs.com/Laeb/archive/2007/02/03/638996.html

.NET 指南:包装异常相关推荐

  1. arm workbench ide 用户指南_ARM_异常和中断

    ARM_异常和中断 问题1.中断向量表为于存储器的什么位置? ARM7系列,除ARM720T可以放高端地址,ARM9或更高都放高端地址上. 2.FIQ或IRQ异常返回指令是什么? 答案见下面.... ...

  2. NestJS 7.x 折腾记: (6) 异常过滤器,取其精华去其糟粕!比如响应异常数据的包装~

    前言 正如官方所说: 内置的异常层负责处理整个应用程序中的所有抛出的异常. 当捕获到未处理的异常时,最终用户将收到友好的响应. NestJS提供了一波拿来即用的内置异常过滤器; 在@nestjs/co ...

  3. 函数式思维: 利用 Either 和 Option 进行函数式错误处理 类型安全的函数式异常...

    当您研究函数式编程等深奥学科时,令人着迷的分支偶尔会出现.在 函数式思维:函数设计模式,第 3 部分 中,我在迷你系列中继续以函数的方式重新思考传统的 Gang of Four 设计模式.在下一期文章 ...

  4. java 中的finally你知多少_Java 处理异常 9 个最佳实践,你知道几个?

    1. 在Finally中清理资源或者使用Try-With-Resource语句使用Finally Java 7的Try-With-Resource语句 2. 给出准确的异常处理信息 3. 记录你所指定 ...

  5. 最最最全面的Java异常面试及解答

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | ThinkWon 来源 | blog.csdn ...

  6. asp.net core webapi 统一处理返回值、异常和请求参数验证

    现在的开发模式很少用asp.net mvc一个项目直接操作界面和数据库了.大部分都使用前后端分离,更多的是为了让API支持移动端. 后端写webapi的时候必然需要和前端约定请求值和返回值的格式,如果 ...

  7. java 如何忽略异常_java中如何解决异常

    原文 | dzone.com/articles/9-- 作者 | Thorben Janssen 翻译 | geekymv 无论你是初学者还是经验丰富的开发人员,对于你和你的团队来说,提高异常处理的能 ...

  8. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践

    在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unche ...

  9. C#规范整理·异常与自定义异常

    这里会列举在C#中处理CLR异常方面的规范,帮助大家构建和开发一个运行良好和可靠的应用系统. 前言   迄今为止,CLR异常机制让人关注最多的一点就是"效率"问题.其实,这里存在认 ...

最新文章

  1. ethercard php_使用Arduino和ENC28J60以太网LAN网络模块发送HTTP POST请求
  2. 数据库acid实现原理(二)
  3. jQueryMobile引入文件后样式无法正常显示
  4. Lis(bzoj 3532)
  5. Linux有问必答:如何检查Linux的内存使用状况
  6. program collections
  7. 信息安全系统设计基础第十一周 20135218 姬梦馨
  8. HTML5崛起之时,Java桌面时代就已经终结了
  9. PageObjects 设计模式
  10. 论坛在线时间挂机器_直播预告 | 智控未来——控制与机器人专题研讨会
  11. 科技圈自媒体达人吴恩达又双叒叕刷屏了 这次是因为Deeplearning.ai
  12. matlab 可视化 —— axis
  13. 第三季-第24课-TCP通讯程序设计
  14. 车机没有carlife可以自己下载吗_视频实测:苹果CarPlay和百度CarLife到底哪个更好用...
  15. 基于C#的在线语音识别软件开发
  16. 翻译《有关编程、重构及其他的终极问题?》——13.表格化的格式化
  17. shiro设置ip白名单_亚马逊家庭IP:Luminati的搭建的步骤
  18. [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  19. 告诉你一个真实的美国
  20. opera 新手操作

热门文章

  1. Mr.J--俄罗斯方块实现(框架)
  2. 64位内核开发第8讲,文件操作.以及删除文件.
  3. 【51NOD】1006 最长公共子序列Lcs(动态规划)
  4. CSS中加号、星号及其他符号的作用
  5. VS里的新建模板(自动添加版本注释)
  6. chrome介绍与用法
  7. http :请求响应报文-web服务-ajax-cors跨域
  8. mysql 拷贝记录吗_MySQL-复制记录和复制表
  9. 利用阈值分割原理,对给定图像编程实现二值、反二值、截断、反截断、大津阈值、自适应阈值等类型阈值图像分割,给出实现源码和结果图像。
  10. GPS、GNSS、NB-IOT介绍