我目前正在进行代码审查,下面的代码让我大吃一惊。我看到此代码存在多个问题。你是否同意我的观点?如果是这样,我该如何向我的同事解释这是错误的(顽固型...)?
- 捕获一般异常(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/