例外の再スロー

キャッチした例外を、そのまま上位層に再度投げることができます。これを例外の再スローといいます。例外を再スローする場合は、「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で例外処理をしています。