キャッチした例外を、そのまま上位層に再度投げることができます。これを例外の再スローといいます。例外を再スローする場合は、「throw」とだけ記述します。例外オブジェクトは指定しません。
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で例外処理をしています。