Exception(例外)


// 任意のコードブロック単位で設定できる。 try { } catch ( e ) { }
C++ との互換性のため 引数なしの catch ブロックもできる。
try { } catch { // ただし例外の詳細な情報はとれない。 }
try { // 例外を意図的になげる throw new Exception( "test" ); } catch ( Exception e ) { // エラー内容と種類 Console.WriteLine( e.Message() ); Console.WriteLine( e.GetType() ); } finally { }



例外の種類


Java と同じく、例外にもクラス階層があり、詳細にエラー処理をする場合は 派生先の例外クラスを指定する。 任意の例外をキャッチするなら、 Exception を指定する。
try { } catch ( IOException ) { } catch ( InvalidOperationException ) { }



例外の再スロー


try { } catch ( Exception e ) { // 何かの処理をして、 // 再度なげる throw; }



非同期Delegateの例外


class Test { public static void method() { Thread.Sleep(3000); Console.Write("例外を発生させます"); int z = 0; int i = 10 / z; } } { public delegate void AsyncInvoke(); static void Main(string[] args) { AsyncInvoke i = new AsyncInvoke( Test.method ); IAsyncResult ret = i.BeginInvoke( null, null ); while (ret.IsCompleted == false ) { Thread.Sleep( 100 ); Console.Write("."); } // EndInvoke() を実行することで, 例外が補足できる。 // 逆に実行をしないと補足できないため、返値の有無に関係なくコールすること。 try { i.EndInvoke(ret); } catch (Exception e) { Console.WriteLine("Thread throw Exception"); } } }