捕获非类型的异常

士兵

捕获非类型的异常之间是否有区别:

try
{
    ...
}
catch (TaskCanceledException)
{
    throw;
}
catch (Exception exception)
{
    ...
}

和:

try
{
    ...
}
catch (Exception exception) when (!(exception is TaskCanceledException))
{
    ...
}
瓦萨鲁诺夫

就在这里。

在第二段代码中,您将根据常规异常类型进行过滤。它不打算被过滤,如果抛出“ TaskCanceledException”,会发生什么?您没有处理它,它将升级为包含代码。您实际上并不是要对“ Exception”类型的任何内容进行过滤,因为它是所有其他类型的异常的父级,并且是处理异常的最后一点。更好的选择是创建一个自定义异常,并将它们放在单独的catch块中,并在需要时对其进行过滤。

与第二个选项相比,第一个选项更正确。尽管您不应抛出任何异常并远离它们,除非这是一个彻底的交易破坏者。最重要的是,放置带有Exception类型的异常下面的catch块的TaskCanceledException catch块有什么意义呢?您基本上是在说使用具有Exception类型的catch时说“我想处理所有异常”,但是同时在特殊情况下您要通过一个异常。抛出原始异常或处理它们。

希望这是有道理的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章