when(C# 参考)
使用上下文关键字 when
在以下上下文中指定筛选条件:
- 在 try/catch 或 try/catch/finally 块的
catch
语句中。 - 作为
switch
语句中的 case guard。 - 作为
switch
表达式中的 case guard。
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;
}
}
}