when (C# reference)

使用 when 上下文关键字在以下上下文中指定筛选器条件:

when catch 子句中的

when关键字可用于 catch 子句,以指定一个条件,该条件必须为处理程序才能执行特定异常。 其语法为:

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;
        }
    }
}

另请参阅