为什么我检测到无法到达的代码

本文关键字:代码 检测 为什么 | 更新日期: 2023-09-27 18:06:25

代码:

catch(Exception ex)
{
  if (ex is WebException)
  {
    wccfg.failedUrls++; //  i think you forgot this
    return csFiles;
  }
  else
  {
    throw new Exception("");
    wccfg.failedUrls++;
    return csFiles;
  }
}

在第二个wccfg(另一个类)上,我看到绿线表示检测到不可达代码。我应该把这行移到throw new Exception行上面吗?

为什么我检测到无法到达的代码

因为一旦你:

throw new Exception("");

该点之后的代码将不再执行。

是的。你要么需要一个return,要么需要一个throw,你不能两者都有。

也没有理由使用if块来测试异常类型是什么,因为您可以有多个catch语句来做这件事。

您得到警告,因为throw new Exception("");之后的代码都不会执行。

这掩盖了一个事实,那就是你的异常处理代码,老实说,是一团糟。已经有一些方法可以处理不同类型的异常,而无需捕获广泛的类别并使用is关键字。通过抛出一个没有详细信息的新异常,你也吞下了一个可能有意义的异常:

你可以考虑用更合适的方式:

catch(WebException ex)
{
    wccfg.failedUrls++;
    return csFiles
}
catch(Exception ex)
{
    wccfg.failedUrls++;
    throw;
}

这样如何-它消除了您的错误(因为在Throw之后没有代码可以执行)并减少了重复:

catch(Exception ex)
{
  wccfg.failedUrls++;
  if (!(ex is WebException))
  {
    throw new Exception("");
  }
}
return csFiles;