when コンテキスト キーワードを使用して、次のコンテキストでフィルター条件を指定します。
-
try-catchまたはtry-catch-finallyステートメントの catch 句。 -
switchのケース ガードとして。 -
switchのケース ガードとして。
C# 言語リファレンスには、C# 言語の最新リリース バージョンが記載されています。 また、今後の言語リリースのパブリック プレビューの機能に関する初期ドキュメントも含まれています。
このドキュメントでは、言語の最後の 3 つのバージョンまたは現在のパブリック プレビューで最初に導入された機能を特定します。
ヒント
C# で機能が初めて導入された時期を確認するには、 C# 言語バージョン履歴に関する記事を参照してください。
when catch 句内
catch 句で when キーワードを使用して、特定の例外のハンドラーが実行するために true である必要がある条件を指定します。 その構文は次のとおりです。
catch (ExceptionType [e]) when (expr)
expr はブール値に評価される式です。
trueを返すと、例外ハンドラーが実行されます。false場合は実行されません。
when キーワードを使用した例外フィルターは、デバッグのサポートとパフォーマンスの向上など、従来の例外処理アプローチよりもいくつかの利点を提供します。 例外フィルターが呼び出し履歴を保持し、デバッグを改善する方法の詳細については、「 例外フィルターと従来の例外処理」を参照してください。
次の例では、 when キーワードを使用して、例外メッセージのテキストに応じて HttpRequestException のハンドラーを条件付きで実行します。
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Console.WriteLine(MakeRequest().Result);
}
public static async Task<string> MakeRequest()
{
var client = new HttpClient();
var streamTask = client.GetStringAsync("https://localHost:10000");
try
{
var responseText = await streamTask;
return responseText;
}
catch (HttpRequestException e) when (e.Message.Contains("301"))
{
return "Site Moved";
}
catch (HttpRequestException e) when (e.Message.Contains("404"))
{
return "Page Not Found";
}
catch (HttpRequestException e)
{
return e.Message;
}
}
}
こちらも参照ください
.NET