gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:02:18 24 4
gpt4 key购买 nike

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

  • 捕获一般异常(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com