c# - 这是捕获非特定异常(例如 System.Exception)的坏习惯吗?为什么?

标签 c# .net exception exception-handling

我目前正在进行代码审查,下面的代码让我大吃一惊。我看到此代码存在多个问题。你是否同意我的观点?如果是这样,我该如何向我的同事解释这是错误的(顽固型...)?

  • 捕获一般异常(Exception ex)
  • 使用“if (ex is something)”而不是另一个 catch block
  • 我们吃 SoapException、HttpException 和 WebException。但是,如果 Web 服务失败,则没有什么可做的。

代码:

try
{
    // Call to a WebService
}
catch (Exception ex)
{
    if (ex is SoapException || ex is HttpException || ex is WebException)
    {
        // Log Error and eat it.
    }
    else
    {
        throw;
    }
}

最佳答案

口头禅是:

  • 你应该只在以下情况下捕获异常 你可以妥善处理它们

因此:

  • 你不应该抓到将军 异常(exception)。

在你的情况下,是的,你应该只捕获这些异常并做一些有用的事情(可能不仅仅是吃掉它们——你可以在记录它们之后throw)。

您的编码器正在使用throw(而不是throw ex),这很好

这是捕获多个特定异常的方法:

try
{
    // Call to a WebService
}
catch (SoapException ex)
{
    // Log Error and eat it
}
catch (HttpException ex)
{
    // Log Error and eat it
}
catch (WebException ex)
{
    // Log Error and eat it
}

这几乎等同于您的代码所做的。您的开发人员可能这样做是为了避免重复“记录错误并吃掉它” block 。

关于c# - 这是捕获非特定异常(例如 System.Exception)的坏习惯吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/426346/

相关文章:

c# - 日期时间中的 'T' 指的是什么? IE。 2014-05-30T11 :20:16 中的 'T'

c# - %在C#中是什么意思?

.net - 将具有 CSV 格式的 PowerShell 对象直接写入 FTP

.net - 在基于声明的应用程序中应用自定义声明

android - 加载 fragment 时出现 NullPointerException

c# - 谁在 C# 中调用 Main() 方法? Main()方法异常时如何退出应用程序?

c# - 将所选行从 ListView 显示到文本框?

c# - 如何在 flex 中为 C# 后端序列化对象

c# - Gridview 标题链接按钮未更新

java - android.content.res.Resources$NotFoundException