【发布时间】:2019-05-02 07:39:14
【问题描述】:
在捕获不是以下类型的异常时是否有区别:
try
{
...
}
catch (TaskCanceledException)
{
throw;
}
catch (Exception exception)
{
...
}
和:
try
{
...
}
catch (Exception exception) when (!(exception is TaskCanceledException))
{
...
}
【问题讨论】:
-
第一个 sn-p 将捕获
TaskCanceledException的所有异常,第二个 sn-p 将捕获除TaskCanceledException之外的所有异常 -
它们可以有不同的执行顺序
finally子句放在try块内:tio.run/… -
@PetSerAI 有趣的例子,你能提供更多关于这种行为的参考吗,所以在过滤器的 catch 中,finally 在所有异常块的最后执行?在没有过滤器的情况下,这是嵌套的?
-
这两种方法在第二个 CLR(检查 ILDASM)中的实现方式不同,首先是 when 部分被执行,并在此基础上进入 catch 块。看看:weblogs.asp.net/dixin/c-6-0-exception-filter-and-when-keyword
-
@peeyushsingh 系统首先搜索一个
catch子句,可以处理异常。这样做时,系统会执行异常过滤器来检查catch是否适用。只有这样嵌套的finally子句才会被执行。这一切都在specification,虽然它有点过时了。在异常过滤器成为 C# 的一部分之前。另外,您可以阅读this。
标签: c#