try {
if (isFileDownloaded)
// do stuff
else
throw new CustomException()
}
catch (Exception e)
{
// something went wrong to save the error to log
}
finally
{
//release resources
}我的问题是,catch会捕获在ApplicationException代码块中抛出的try吗?它的编码风格很差吗?
它应该用另一种方式写吗?
发布于 2010-07-21 03:37:24
catch将捕获您的异常(以及发生的任何其他异常)。话虽如此,我还是尽量避免写这样的代码。
就我个人而言,我看不出有什么理由对同一范围内抛出的异常进行异常处理(catch)。如果你可以在你的方法中处理你的错误--把异常处理(例如:日志记录)直接放在try块中。
在捕捉由try块中的方法抛出的异常时,使用catch更有用。这会更有用,例如,如果您的// do stuff节碰巧调用了引发异常的方法。
另外,我建议不要捕获每个异常(Exception e),而是捕获您可以正确处理的特定类型的异常。有一个例外是,如果你在catch中重新抛出异常,比如:将它用于日志记录,但仍然让它在调用堆栈中冒泡。
发布于 2010-07-21 03:36:56
是的,它将捕获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-21 03:41:30
此外,仅供参考,ApplicationException作为派生自的例外从.NET 2.0开始就被弃用了。它从来没有打算自己抛出一个异常,所以你可能根本不应该使用它。
https://stackoverflow.com/questions/3293652
复制相似问题