c# - C# 中的一般异常处理

标签 c# exception-handling

我正在通过 FxCop 运行一些代码,目前正在考虑清除所有非破坏性违规。

代码本身有几个 try/catch block 的实例,它们只捕获一般异常;

try
{
    // Some code in here that could throw an exception
}
catch(Exception ex)
{
    // Exception Thrown ... sort it out!
}

现在我们都知道这是不好的做法,但我认为我知道如何正确地做到这一点 - 但 FxCop 有其他想法!

假设 try block 中的代码可以抛出一个 IO 异常 - 并且只是一个 IO 异常。这样做应该没有错:

try
{
    // Code in here that can only throw an IOException
}
catch (System.IO.IOException ioExp)
{
    // Handle the IO exception or throw it
}
catch (System.Exception ex)
{
    // Catch otherwise unhandled exception
}

但 FxCop 不同意我的看法……它仍然将此标记为违规,因为我正在捕获 System.Exception

这是真的不好的做法还是我应该/可以安全地忽略这种违规行为?

最佳答案

我同意 FxCop 和此处的大多数其他答案:不要捕获 System.Exception ever,除非它在您的应用程序中处于最高级别以进行记录意外(因此是致命的)异常,然后轰炸应用程序。 Also check out this question that's basically about the same thing.

其他一些有效的异常(exception)可能是:

  • 为了重新抛出更具描述性的异常而捕获异常。
  • 在需要比 ExpectedExceptionAttribute 更复杂的东西的单元测试代码中。
  • 在 Facade 库中,代码的存在只是为了保护调用者免受调用某些外部(网络)服务的复杂性的影响,而无论外部系统出现多么严重的故障,它自己都不会真正失败。

关于c# - C# 中的一般异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1629794/

相关文章:

c# - 存储和检索在使用 facebook 或 twitter 授权后为用户收到的 token

C#如何改变DataTable中的数据?

C# tostring(基数)

exception-handling - 尝试和弹弓/尝试+的区别?

ruby-on-rails - 是否有可以跟踪独特错误的 Rails 库?

c# - 为什么 Visual Studio 不会因未处理的外部异常而中断?

c# - 未从路由 C# 接收数据

c# - 当用户是管理员时包括 IsDeleted 值

c# - 如何改进这种异常重试场景?

c# - 一般 C# 问题