【问题标题】:Exception Handling - What is the correct way to do it? [duplicate]异常处理 - 正确的方法是什么? [复制]
【发布时间】:2013-08-31 19:37:11
【问题描述】:

我使用异常处理已经有一段时间了,并且已经安装了 Resharper,现在收到各种消息说我应该并且应该这样做。无论如何,它说我不应该在我的代码周围使用 try 和 catch 块。那么我应该把它们放在哪里来捕获异常呢?我见过有人在寻找某些异常,例如 File not found,但其他所有唯一的错误或异常呢?

下面是一些它抱怨的异常处理示例:

try
{
    var rnd = new Random();
    var buffer = new byte[sizeof(UInt64)];
    rnd.NextBytes(buffer);
}
catch (Exception)
{
    throw;
}

有没有人有异常处理最佳实践的链接,可以让 re-sharper 满意?

【问题讨论】:

  • 你把它们放进去捕捉你可以做些什么的异常。你没有对这里的任何异常做任何事情;你只是抓住它,什么都不做,然后再次扔掉它。例外情况是,如果您什么都不做,已经将成为调用者的问题;您不需要实际编写代码来执行运行时将自动执行的操作。
  • 另外,在编写更多异常处理代码之前请阅读此内容:ericlippert.com/2008/09/10/vexing-exceptions
  • 这个问题虽然不适合 SO,但有很多好的建议:stackoverflow.com/questions/2883936/…
  • @EricLippert 我想为此给你的 cmets +10,尤其是第一个。

标签: c# exception-handling


【解决方案1】:

正如其他人已经指出的那样,只有在您确实计划对 catch 块内的异常执行某些操作时才使用 try/catch - 这样做请记住,实际上并不能保证 catch 块将实际执行(例如电源故障)。

查看当我问一个非常相似的问题时给我的解释:when to use try/catch

如果您只想诊断/记录异常而不做任何特定的事情,您可以使用全局异常处理程序,即AppDomain.UnhandledException - 这样您就可以集中处理。

【讨论】:

    【解决方案2】:

    只捕获那些您可以处理的异常,例如插入重复的主键,这样您就可以向用户显示一条消息以输入不同的值。

    对于其他例外,让它们在您的库中冒泡并在一个地方处理它们。类似于 ASP.Net 中的 Application_Error 事件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2020-06-26
      相关资源
      最近更新 更多