捕获除了给定类型之外的所有异常:catch和rethrow或catch when

本文关键字:catch 异常 when rethrow 类型 | 更新日期: 2023-09-27 18:18:09

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

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
}

或者这真的不重要吗?有没有更好的办法?

捕获除了给定类型之外的所有异常:catch和rethrow或catch when

第二种方法分析起来更清晰,也是我看到最多的。特定捕获首先发生,不会触发泛型捕获,但如果没有实现特定捕获,仍然有回退。此外,为了处理多个特定的异常,您还需要更多的!(ex is SpecificException)检查。