クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
.NET 開発
.NET Framework 3.5
.NET Framework 3.5
 標準の例外の種類のキャッチとスロー
すべて縮小/すべて展開 すべて縮小
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2008/.NET Framework 3.5

その他のバージョンについては、以下の情報を参照してください。
.NET Framework 開発者ガイド
標準の例外の種類のキャッチとスロー

更新 : 2007 年 11 月

以下のガイドラインでは、.NET Framework によって提供される例外の中で、最もよく使用されているいくつかの例外について、その推奨事項を示します。Framework によって提供される例外クラスの完全な一覧については、「.NET Framework クラス ライブラリ リファレンス」を参照してください。

System.Exception や System.SystemException はスローしないでください。

再スローを目的にする場合を除き、System.Exception や System.SystemException をフレームワーク コードでキャッチしないでください。

System.Exception や System.SystemException を最上位の例外ハンドラ以外でキャッチするのは避けてください。

カスタム例外は、T:System.ApplicationException クラスではなく T:System.Exception クラスから派生してください。

本来、カスタム例外は ApplicationException クラスから派生しなければならないと考えられていましたが、それによって大きな価値が付加されたことはないようです。詳細については、「例外処理の実施」を参照してください。

不適切な状態では、System.InvalidOperationException 例外をスローしてください。オブジェクトの現在の状態から判断して、プロパティ セットやメソッド呼び出しが不適切な場合は、System.InvalidOperationException をスローする必要があります。たとえば、読み込み用として開かれている System.IO.FileStream に書き込みが行われた場合は、System.InvalidOperationException 例外をスローしてください。

この例外は、関連するオブジェクト セットの状態の組み合わせが、操作に対して無効な場合にもスローする必要があります。

不適切な引数がメンバに渡された場合は、System.ArgumentException またはそのサブタイプのいずれかをスローしてください。妥当な場合は、最派生例外をスローすることをお勧めします。

引数が null (Visual Basic では Nothing) の場合に例外をスローするコード例を次に示します。

Visual Basic
If (anObject = Nothing) Then
    Throw New ArgumentNullException("anObject", "Specify a non-null argument.")
End If
C#
if (anObject == null)
{
    throw new ArgumentNullException("anObject",
        "Specify a non-null argument.");
}

System.ArgumentException またはその派生型のいずれかをスローする場合は、System.ArgumentException.ParamName プロパティを設定してください。このプロパティは、例外をスローする原因になったパラメータの名前を格納します。このプロパティは、コンストラクタのオーバーロードのいずれかを使用して設定できます。

プロパティ Set アクセス操作子 の暗黙の値パラメータの名前を表す値を使用してください。

呼び出し元が null 引数を渡した場合に例外をスローするプロパティを次のコード例に示します。

Visual Basic
Public Property Address() As IPAddress
    Get
        Return IPaddr
    End Get
    Set(ByVal value As IPAddress)
        If IsNothing(value) Then
            Throw New ArgumentNullException("value")
        End If
        IPaddr = value
    End Set
End Property
C#
public IPAddress Address
{
    get
    {
        return address;
    }
    set
    {
        if(value == null)
        {
            throw new ArgumentNullException("value");
        }
        address = value;
    }
}

パブリックに呼び出し可能な API に、System.NullReferenceException、System.AccessViolationException、System.InvalidCastException、System.IndexOutOfRangeException の各例外を明示的または暗黙にスローさせないでください。引数チェックを行って、これらの例外をスローするのを避けてください。これらの例外をスローすると、時間と共に変更される可能性があるメソッドの実装の詳細が公開されます。

System.StackOverflowException を明示的にスローしないでください。この例外は、共通言語ランタイム (CLR: Common Language Runtime) によってのみ明示的にスローされる必要があります。

System.StackOverflowException をキャッチしないでください。

スタック オーバーフローをプログラムによって処理するのはきわめて困難です。この例外でプロセスを終了できるようにし、デバッグを使って問題の原因を特定する必要があります。

System.OutOfMemoryException を明示的にスローしないでください。この例外は、CLR インフラストラクチャによってのみスローされる必要があります。

System.Runtime.InteropServices.COMException または System.Runtime.InteropServices.SEHException を明示的にスローしないでください。これらの例外は、CLR インフラストラクチャによってのみスローされる必要があります。

System.Runtime.InteropServices.SEHException を明示的にキャッチしないでください。

System.ExecutionEngineException を明示的にスローしないでください。

Portions Copyright 2005 Microsoft Corporation.All rights reserved.

Portions Copyright Addison-Wesley Corporation.All rights reserved.

デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件 | 商標 | プライバシー
Page view tracker