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