.net – 尝试捕捉仍然有用吗?

当我第一次开始在.NET中编程时,我一直使用try / catch.尽管我很少使用它们用于Web应用程序,但我最近发现.我的例外(没有双关意图)是非托管代码,可能会创建内存泄漏,如com对象.他们真的需要了吗,还是把事情搞砸了?

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

解决方法

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

>你能处理错误吗? (也许这意味着再试一次,或使用不同的设置,返回替代值等)
>你能提供一个更好的错误信息(更多细节)?
>你需要记录这个具体的错误吗? (请注意,所有错误都应该记录在最高级别 – 例如Application_Error方法中的global.asax文件中)
>您需要清理/处理操作中使用的资源,例如数据库连接或事务?

如果您对其中任何一个回答“是”,那么请确保使用try / catch.如果你说不,那么你可以安全地允许一个错误页面显示出来,让全局错误处理程序记录它.

如果您打算记录或清理资源,但仍然让异常通过,请确保使用throw;而不是创造一个全新的例外.这样做会消除你的堆栈跟踪,基本上给出错误没有上下文.

刚刚发现this excellent quoteAyende似乎把它非常好:

Exception handling should appear in
exactly two places:

  • When an error is expected (making a web request call,for example) and
    there is some meaningful behavior to
    be done in the case of a failure (such
    as retrying after some delay)
  • On a system boundary,in which case you need to make a decision about how you are going to expose the error to the outside world.

相关文章

判断URL文件是不是在于在。private static bool UrlIsExist(...
由于在.net中,Request时出现有HTML或Javascript等字符串时,...
public static bool ProcessIdCard(this string idCard, out...
protected void Page_Load(object sender, EventArgs e){ Sc...