尝试处理异常时命令catch块

use*_*ser 4 c# exception try-catch

try
{
    // throws IOException
}
catch(Exception e)
{
}
catch(IOException e)
{
}
Run Code Online (Sandbox Code Playgroud)

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

Son*_*nül 10

来自try-catch(C#参考) ;

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

你应该用

try
{
    // throws IOException
}
catch(IOException e)
{
}
catch(Exception e)
{
}
Run Code Online (Sandbox Code Playgroud)

请注意,Exceptionclass是所有异常的基类.


Rvd*_*vdK 0

它们会按照您指定的顺序捕获。在你的情况下,你应该放在IOException上面Exception。始终保留Exception在最后。