when (C# リファレンス)

コンテキスト キーワード when は、次のコンテキストでフィルター条件を指定するために使用します。

catch 句内の when

when キーワードを catch 句で使用して、特定の例外のハンドラーを実行するために true になる必要がある条件を指定できます。 構文は次のとおりです。

catch (ExceptionType [e]) when (expr)

expr の箇所には、ブール値に評価される式を指定します。 true が返された場合は、例外ハンドラーが実行されます。false の場合は実行されません。

次の例では、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;
        }
    }
}

関連項目