ユーザー フィルター例外ハンドラーを使用する
ユーザー フィルター例外ハンドラーは、ユーザーが例外に対して定義した要件に基づいて、例外をキャッチして処理します。 これらのハンドラーからは、catch
ステートメントが when
キーワード (Visual Basic では Catch
と When
) と共に使用されます。
この手法は、特定の例外オブジェクトが複数のエラーに対応する場合に便利です。 その場合、オブジェクトには通常、エラーに関連付けられた特定のエラー コードが格納されているプロパティがあります。 エラー コード プロパティを式で使用すると、その 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
関連項目
.NET