次の方法で共有


.NET での例外の処理とスロー

アプリケーションは、実行中に発生したエラーを一貫した方法で処理できる必要があります。 .NET には、アプリケーションにエラーを一様な方法で通知するためのモデルが用意されています。.NET 操作は、例外をスローすることによってエラーを示します。

例外

例外は、実行中のプログラムで発生したエラー状態または予期しない動作です。 例外は、コードまたは呼び出したコード (共有ライブラリなど)、使用できないオペレーティング システム リソース、ランタイムで発生する予期しない条件 (検証できないコードなど) が原因でスローされる可能性があります。 アプリケーションは、これらの条件の一部から回復できますが、他の条件からは回復できません。 ほとんどのアプリケーション例外から復旧できますが、ほとんどのランタイム例外から復旧することはできません。

.NET では、例外は System.Exception クラスから継承するオブジェクトです。 問題が発生したコード領域から例外がスローされます。 例外は、アプリケーションが処理するか、プログラムが終了するまでスタックに渡されます。

例外と従来のエラー処理メソッド

従来、言語のエラー処理モデルは、エラーを検出してハンドラーを検索する言語固有の方法か、オペレーティング システムによって提供されるエラー処理メカニズムに依存していました。 .NET で例外処理を実装する方法には、次の利点があります。

  • 例外のスローと処理は、.NET プログラミング言語でも同じように動作します。

  • 例外を処理するために特定の言語構文は必要ありませんが、各言語で独自の構文を定義できます。

  • 例外は、プロセスやマシンの境界を越えてスローされる可能性があります。

  • 例外処理コードをアプリケーションに追加して、プログラムの信頼性を高めることができます。

例外は、リターン コードなど、エラー通知の他の方法よりも優れた利点を提供します。 例外がスローされ、処理されない場合、ランタイムによってアプリケーションが終了されるため、エラーは気付かれません。 エラー リターン コードのチェックに失敗したコードの結果として、無効な値がシステムに伝達され続けません。

一般的な例外

次の表に、いくつかの一般的な例外と、その原因の例を示します。

例外の種類 説明
Exception すべての例外の基本クラス。 なし (この例外の派生クラスを使用します)。
IndexOutOfRangeException 配列のインデックスが正しくない場合にのみ、ランタイムによってスローされます。 有効な範囲外の配列のインデックス作成:
arr[arr.Length+1]
NullReferenceException null オブジェクトが参照されている場合にのみ、ランタイムによってスローされます。 object o = null;
o.ToString();
InvalidOperationException 無効な状態にある場合にメソッドによってスローされます。 基になるコレクションから項目を削除した後に Enumerator.MoveNext() を呼び出します。
ArgumentException すべての引数例外の基底クラス。 なし (この例外の派生クラスを使用します)。
ArgumentNullException 引数を null にできないメソッドによってスローされます。 String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException 引数が特定の範囲内にあることを確認するメソッドによってスローされます。 String s = "string";
s.Substring(s.Length+1);

こちらも参照ください