C# 为什么要替换异常?

C# 为什么要替换异常?,c#,exception,exception-handling,enterprise-library,C#,Exception,Exception Handling,Enterprise Library,我正在使用EnterpriseLibrary5.0,这是一种管理横切关注点的工具,如日志记录 该工具给我的一个选项是“替换”异常。在某些情况下,我可以看到wrap的用途,但是为什么我要完全替换这个异常呢 谢谢我不知道这是否适用,但WCF也有类似的功能。在通信边界上传递所有错误信息有时会带来安全风险。如果原始异常包含敏感的专有数据或类似数据,而您只是想批量替换它,该怎么办?这可能是一种包装不合适的情况,因为你要做的是去掉敏感部件,但保留一组核心技术信息。我在过去的金融应用程序中也遇到过类似的问题,

我正在使用EnterpriseLibrary5.0,这是一种管理横切关注点的工具,如日志记录

该工具给我的一个选项是“替换”异常。在某些情况下,我可以看到wrap的用途,但是为什么我要完全替换这个异常呢


谢谢

我不知道这是否适用,但WCF也有类似的功能。在通信边界上传递所有错误信息有时会带来安全风险。

如果原始异常包含敏感的专有数据或类似数据,而您只是想批量替换它,该怎么办?这可能是一种包装不合适的情况,因为你要做的是去掉敏感部件,但保留一组核心技术信息。我在过去的金融应用程序中也遇到过类似的问题,例如,你不想向供应商发送完整的内部日志。在这种情况下,将敏感和非敏感的错误处理显式地分离到不同的日志接收器需要一些努力。

我猜您是在谈论异常处理块吧?我研究了一会儿,试图找到它背后的要点。诚然,我还是不太明白,但这是一种职业责任。据我所知,它让it员工对异常报告和处理方式有了一定程度的控制


这与企业环境相关,在企业环境中,创建异常的人员(软件工程师)和必须处理异常的人员(IT员工和用户)之间的部门差距可能难以弥合。带有无法穿透的异常消息的代码崩溃非常常见,使用中间的许多管理层修复它们可能非常困难和耗时。在这种情况下,能够改进诊断并帮助用户避免犯同样的错误,而不必杀掉企业巨龙,这是非常有意义的。

替换错误有很多原因,就像这里的其他答案一样,安全性是其中之一,但不是唯一的原因。有时,您可能只想改进API,以便应用程序的不同层对有意义的事情做出响应。例如,我不希望看到桌面应用程序的UI捕获SQL异常,解析该异常,然后告诉用户在数据库中发现了重复的键。相反,您可能会从数据访问层抛出一个名为DuplicateRecordException的自定义异常。此异常可能包括原始异常作为InnerException,但现在您有一个来自DAL的异常,从UI层的角度来看是有意义的

Hans,这听起来像是包装异常的动机。