try {
if (isFileDownloaded)
//do stuff
else
throw new CustomException()
}
catch (Exception e)
{
// something went wrong save error to log
}
finally
{
//release resources
}
我的问题是catch
会抓住try块中抛出的ApplicationException
吗?是编码风格差吗?它应该用另一种方式写出来吗?
答案 0 :(得分:23)
catch
将捕获您的异常(以及发生的任何其他异常)。话虽如此,我尽量避免在可能的情况下编写这样的代码。
就个人而言,我认为没有理由对同一范围内抛出的异常进行异常处理(catch)。如果您可以在方法中处理错误 - 也将异常处理(即:logging)直接放在try块中。
使用catch
对于捕获try
块中方法引发的异常更有用。这会更有用,例如,如果您的// do stuff
部分恰好调用了引发异常的方法。
另外,我建议不要捕获每个异常(Exception e
),而是捕获正确处理的特定异常类型。一个例外是如果你在你的catch中重新抛出异常 - 即:使用它进行日志记录但仍然让它冒出调用堆栈。
答案 1 :(得分:7)
是的,它会抓住ApplicationException
,因为它来自Exception
。
在大多数情况下处理基本异常应该没问题,除非你需要记录或做一些不同类型的异常 ......
try{
if (isFileDownloaded)
//do stuff
else
throw new ApplicationException();
}
catch(ApplicationException ae)
{
// log it application exception here...
}
catch(Exception ex)
{
// log all other exceptions here...
}
finally
{
// release resources...
}
答案 2 :(得分:1)
是的,catch会捕获你的ApplicationException,是的,编码风格很差。作为一个很好的一般规则,只捕获特定的异常和那些你要做的事情,比如修复应用程序状态。
答案 3 :(得分:1)
此外,FYI,ApplicationException
自.NET 2.0以来已被弃用,作为派生的例外。从来没有打算作为一个例外,所以你可能根本不应该使用它。