次の方法で共有


ユーザー フィルター例外ハンドラーを使用する

ユーザー フィルター例外ハンドラーは、ユーザーが例外に対して定義した要件に基づいて、例外をキャッチして処理します。 これらのハンドラーからは、catch ステートメントが when キーワード (Visual Basic では CatchWhen) と共に使用されます。

この手法は、特定の例外オブジェクトが複数のエラーに対応する場合に便利です。 その場合、オブジェクトには通常、エラーに関連付けられた特定のエラー コードが格納されているプロパティがあります。 エラー コード プロパティを式で使用すると、その catch 句で処理する特定のエラーだけを選択することができます。

catch/when ステートメントの例を次に示します。

try
{
    //Try statements.  
}
catch (Exception ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.  
    Catch When Err = VBErr_ClassLoadException
    'Catch statements.
End Try  

ユーザー フィルター句の式が制限されることはありません。 ユーザー フィルター式の実行中に例外が発生した場合、その例外は破棄され、フィルター式は false と評価されたものと見なされます。 その場合、共通言語ランタイムは、現在の例外に対応するハンドラーの検索を継続します。

特定の例外とユーザー フィルター句の結合

catch ステートメントには、特定の例外とユーザー フィルター句の両方を含めることができます。 ランタイムは、最初に特定の例外をテストします。 特定の例外がテストを通過すると、ランタイムはユーザー フィルターを実行します。 汎用フィルターには、クラス フィルターで宣言されている変数への参照を含めることができます。 なお、2 つのフィルター句の順序をが逆にすることはできません。

次の例は、特定の例外が指定された catch ステートメントと、when キーワードを使用したユーザー フィルター句を示しています。

try
{
    //Try statements.  
}
catch (System.Net.Http.HttpRequestException ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.
    Catch cle As ClassLoadException When cle.IsRecoverable()  
    'Catch statements.
End Try  

関連項目