27
try { 
  if (isFileDownloaded)
   // do stuff
  else
   throw new CustomException()
} 
catch (Exception e)
{
  // something went wrong to save the error to log
}
finally
{
  //release resources
}

我的问题是在 try 块中抛出的catch捕获?ApplicationException它的编码风格很差吗?

是不是应该换成别的写法?

4

4 回答 4

32

catch捕获您的异常(以及发生的任何其他异常)。话虽如此,我尽量避免编写这样的代码。

就个人而言,我认为几乎没有理由对同一范围内抛出的异常进行异常处理(捕获)。如果您可以在您的方法中处理您的错误 - 也将异常处理(即:日志记录)直接放在 try 块中。

使用 acatch更有用,IMO,用于捕获try块内方法引发的异常。这会更有用,例如,如果您的// do stuff部分碰巧调用了引发异常的方法。

另外,我建议不要捕获每个异常 ( Exception e),而是您可以正确处理的特定类型的异常。一个例外是如果你在你的捕获中重新抛出异常 - 即:将它用于记录目的但仍然让它在调用堆栈中冒泡。

于 2010-07-20T19:37:24.150 回答
12

是的,它会捕获ApplicationException,因为它源自Exception.

在大多数情况下处理基本异常应该没问题,除非您需要记录或使用不同类型的异常做某事......

try {
    if (isFileDownloaded)
       doSomeThings();
    else
       throw new ApplicationException("Something expectedly unexpected happened.");
}
catch(ApplicationException e)
{
   // log application exception here...
}
catch(Exception e)
{
   // log all other exceptions here...
}
finally
{
   // release resources...
}
于 2010-07-20T19:36:56.257 回答
2

此外,仅供参考,ApplicationException自 .NET 2.0 以来已被弃用,作为派生的例外。它从来没有打算作为一个异常自行抛出,所以你可能根本不应该使用它。

于 2010-07-20T19:41:29.620 回答
1

是的,捕获会捕获您的 ApplicationException ,是的,编码风格很差。作为一个好的一般规则,只捕获特定的异常以及您将要处理的那些异常,例如修复应用程序状态。

于 2010-07-20T19:38:24.280 回答