C#:多个catch子句

Cra*_*ton 17 c# exception-handling try-catch

考虑以下:

try { 
    FileStream fileStream = new FileStream("C:\files\file1.txt", FileMode.Append); }
catch (DirectoryNotFoundException e) 
    { MessageBox.Show("Directory not found. " + e.Message); }
catch (IOException e) 
    { MessageBox.Show("Other IO Error. " + e.Message); }
catch (Exception e) 
    { MessageBox.Show("Other Error. " + e.Message); }
Run Code Online (Sandbox Code Playgroud)

是否DirectoryNotFoundException所有三个catch条款或第一个条款都处理异常?

Jon*_*eet 27

只是第一个.该异常不会传播到所有匹配的catch子句.

从C#4规范,第8.9.5节:

catch指定异常类型的第一个子句或异常类型的基本类型被视为匹配.[...]如果找到匹配的catch子句,则通过将控制转移到该catch子句的块来完成异常传播.

这里"完成"部分表示在控制转移后,这是特殊处理的结束,有效.