Try Catches仍然有用吗?

Al *_*azi 9 .net asp.net asp.net-mvc

当我第一次开始使用.NET编程时,我一直使用try/catches.我最近发现虽然我很少将它们用于Web应用程序.我的异常(没有双关语)是非托管代码,可能会产生内存泄漏,如com对象.他们真的需要它们还是只是把事情弄得乱七八糟?

更新:假设正在使用自定义错误来处理丑陋的堆栈跟踪页面.

Ben*_*man 22

我发现初级程序员使用try/catch WAY太重了.使用try/catch的决定应该归结为这些简单的规则:

  • 你能处理错误吗?(也许这意味着再试一次,或者使用不同的设置,返回替换值等)

  • 你能提供更好的错误信息(更详细)吗?

  • 你需要记录这个特定的错误吗?(请记住,所有错误都应记录在最高级别 - 例如,在Application_Error方法中的global.asax文件中)

  • 您是否需要清理/处置操作中使用的资源,例如数据库连接或事务?

如果您对其中任何一个回答"是",那么请确保使用try/catch.如果您拒绝,则可以安全地允许显示错误页面并让全局错误处理程序记录它.

如果您确实打算记录或清理资源,但仍然允许异常通过,请确保使用throw;而不是创建全新的异常.这样做将消除堆栈跟踪,基本上没有上下文错误.

刚刚发现这个优秀的报价Ayende似乎说得非常漂亮:

异常处理应该出现在两个地方:

  • 当预期出现错误时(例如,发出Web请求调用)并且在发生故障时(例如在延迟一段时间后重试)有一些有意义的行为要做
  • 在系统边界上,在这种情况下,您需要决定如何将错误暴露给外部世界.


Jar*_*Par 18

这是问题形式的答案

如果不捕获异常,您期望如何进行错误处理?

例外(正确或错误)是.Net语言的错误机制.您根本无法编写既忽略异常又具有足够错误处理的应用程序.它根深蒂固到框架中,无法避免