除了给定的类型之外,哪个更好地捕获所有异常:catch和rethrow或catch何时捕获?

时间:2016-11-16 18:03:03

标签: c# exception exception-handling

如果我想捕获除给定类型之外的所有异常,并且将重新抛出这些特定类型以便在更高的上下文中捕获,那么它会更好:

try
{
    //Code that might throw an exception
}
//Catch exceptions to be handled in this context
catch (Exception ex) when (!IsExcludedException(ex))
{
    //Handle leftover exceptions
}

或者做得更好:

try
{
    //Code that might throw an exception
}
catch (SpecificException)
{
    throw;
}
//Catch exceptions to be handled in this context
catch (Exception ex)
{
    //Handle leftover exceptions
}

或者它真的不重要吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:6)

第二种方式绝对是分析清晰,它是我最看重的。特定捕获首先发生并且不触发通用捕获,但如果您没有实现特定捕获,则仍然会有后备。此外,为了处理多个特定的例外情况,您还需要进行更多!(ex is SpecificException)次检查。