捕获非以下类型的异常时是否有区别:
try
{
...
}
catch (TaskCanceledException)
{
throw;
}
catch (Exception exception)
{
...
}
和:
try
{
...
}
catch (Exception exception) when (!(exception is TaskCanceledException))
{
...
}
最佳答案
是的,有。
在第二个代码块中,您将过滤一般异常类型。它不是要被过滤的,如果抛出“TaskCanceledException”会怎样?您没有处理它,它将升级为包含代码。您并不是真的要过滤“异常”类型的任何内容,因为它是所有其他类型异常的父级,并且是处理异常的最后一点。更好的选择是创建一个自定义异常并将它们放在单独的 catch block 中,并在需要时对其进行过滤。
与第二个选项相比,第一个选项更正确。尽管您不应该抛出任何异常并远离它们,除非它完全破坏交易。最重要的是,在抛出异常的 TaskCanceledException catch block 下面放置一个异常类型的 catch block 有什么意义?当使用异常类型的 catch 时,您基本上是在告诉“我想处理所有异常”,但同时您在异常情况下通过一个异常。抛出原始异常或处理它们。
希望这是有道理的。
关于c# - 捕获非类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55947708/