尝试处理异常时命令catch块

时间:2013-03-25 07:18:56

标签: c# exception try-catch

try
{
    // throws IOException
}
catch(Exception e)
{
}
catch(IOException e)
{
}

try块抛出IOException时,它将调用第一个catch块而不是第二个块。任何人都可以解释这一点。为什么它会先调用catch阻止?

5 个答案:

答案 0 :(得分:8)

来自 try-catch (C# Reference) ;

  

可以在同一个中使用多个特定的catch子句   try-catch语句。在这种情况下,catch子句的顺序是   很重要,因为捕获条款是按顺序检查的。 赶上   在不太具体的例外之前的更具体的例外。编译器   如果您订购了catch块以便稍后阻塞,则会产生错误   永远无法联系到。

你应该使用

try
{
    // throws IOException
}
catch(IOException e)
{
}
catch(Exception e)
{
}

请注意,Exception class是所有异常的基类。

答案 1 :(得分:1)

异常类是所有异常的基类。因此,每当抛出任何类型的异常时,它将首先被第一个可以捕获任何类型的异常的catch块捕获。

因此,请尝试在IOCException

之前使用Exception

您可以看到IOCException here

的层次结构

答案 2 :(得分:0)

按照您指定的顺序捕获它们。在您的情况下,您应将IOException置于Exception之上。始终保持Exception为最后一次。

答案 3 :(得分:0)

原因是IOException来自Exception,因此IOException实际上 Exception(“is-a”)因此第一个catch处理程序匹配并正在输入。

答案 4 :(得分:0)

IOException继承自Exception。所有例外都有。首先捕获Exception时,将捕获所有异常(包括IOException)。确保catch(Exception e)是列表中的最后一个catch,否则将有效地忽略所有其他异常处理。

相关问题