キャッチした例外を、そのまま上位層に再度投げることができます。これを例外の再スローといいます。例外を再スローする場合は、「throw」とだけ記述します。例外オブジェクトは指定しません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | using System; using System.IO; namespace ExceptionSample { class Program { static void Main( string [] args){ try { Foo (); } catch (System.ArgumentException) { Console.WriteLine ( "FooでArgumentException発生" ); } try { Bar (); } catch (System.ArgumentException) { Console.WriteLine ( "BarでArgumentException発生" ); } Console.ReadLine (); } public static void Foo() { try { Exec (); } catch (System.ArgumentException) { Console.WriteLine ( "ExecでArgumentException発生" ); } Console.WriteLine ( "Foo終了" ); } public static void Bar() { try { Exec (); } catch (System.ArgumentException) { Console.WriteLine ( "ExecでArgumentException発生" ); throw ; } Console.WriteLine ( "Bar終了" ); } public static void Exec(){ throw new System.ArgumentException (); } } } |
MainメソッドではFooメソッドとBarメソッドの呼び出し時の例外をキャッチするようにしています。Fooメソッド、Barメソッドの中でも、try-catchで例外処理をしています。