.NET での例外の処理とスローHandling and throwing exceptions in .NET

アプリケーションは、実行中に発生するエラーを一貫した方法で処理できなければなりません。Applications must be able to handle errors that occur during execution in a consistent manner. .NET では、一貫した方法でアプリケーションにエラーを通知するためのモデルが用意されています。 .NET 操作では、例外をスローすることによって障害の発生を示します。.NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

例外Exceptions

例外とは、プログラムを実行することによって発生するエラー状態または予期しない動作のことです。An exception is any error condition or unexpected behavior that is encountered by an executing program. 例外がスローされる原因として、コードまたは呼び出したコード (たとえば共有ライブラリ) 内に障害がある、オペレーティング システム リソースを使用できない、予期しない状態 (たとえば検証できないコード) をランタイムが検出したなどがあります。Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. アプリケーションは、他の状態からではなく、これらの状態のうちのいくつかから回復できます。Your application can recover from some of these conditions, but not from others. ほとんどのアプリケーション例外から回復できますが、ほとんどのランタイム例外からは回復できません。Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

.NET では、例外は、System.Exception クラスから継承されるオブジェクトです。In .NET, an exception is an object that inherits from the System.Exception class. 例外は問題が発生したコード領域からスローされます。An exception is thrown from an area of code where a problem has occurred. 例外は、アプリケーションが処理するかプログラムが終了するまで、スタックに渡されます。The exception is passed up the stack until the application handles it or the program terminates.

例外:従来のエラー処理メソッドExceptions vs. traditional error-handling methods

言語のエラー処理モデルは従来、エラーを検出してそれに対応したハンドラーを見つける言語固有の方法か、オペレーティング システムが備えているエラー処理機構のいずれかを使用していました。Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. .NET が例外処理を実装する方法は、次の利点をもたらします。The way .NET implements exception handling provides the following advantages:

  • 例外のスローと処理は、.NET プログラミング言語では同じように機能します。Exception throwing and handling works the same for .NET programming languages.

  • 例外を処理するための特定の言語構文を必要とせず、各言語が独自の構文を定義できます。Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • 例外は、プロセス間、さらにはコンピューターの境界を越えてスローできます。Exceptions can be thrown across process and even machine boundaries.

  • プログラムの信頼性を高めるための例外処理コードをアプリケーションに追加できます。Exception-handling code can be added to an application to increase program reliability.

例外には、リターン コードなどの他のエラー通知メソッドに優る利点があります。Exceptions offer advantages over other methods of error notification, such as return codes. 例外がスローされ、それを処理しないと、ランタイムによってアプリケーションが終了されるため、エラーが見過ごされることはありません。Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. 無効な値は、エラーのリターン コードの確認に失敗したコードの結果として、システムを経由した伝達を続行しません。Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

一般的な例外Common exceptions

次の表は、一般的な例外とそれらの原因の例をいくつか示しています。The following table lists some common exceptions with examples of what can cause them.

例外の種類Exception type 説明Description Example
Exception すべての例外の基底クラスです。Base class for all exceptions. なし (この例外の派生クラスを使用)。None (use a derived class of this exception).
IndexOutOfRangeException 配列のインデックスが誤っている場合にのみ、ランタイムによってスローされます。Thrown by the runtime only when an array is indexed improperly. 次のように、配列に対して配列の有効範囲外のインデックスを付けた場合。Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException null オブジェクトが参照された場合にのみ、ランタイムによってスローされます。Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException 無効な状態の場合にメソッドによってスローされます。Thrown by methods when in an invalid state. 基になるコレクションから項目を削除した後での、Enumerator.MoveNext() の呼び出しです。Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException すべての引数の例外の基底クラスです。Base class for all argument exceptions. なし (この例外の派生クラスを使用)。None (use a derived class of this exception).
ArgumentNullException null の引数を許可しないメソッドによってスローされます。Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException 引数が特定の範囲内にあることを検査するメソッドによってスローされます。Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

関連項目See also