使用 when
上下文关键字在以下上下文中指定筛选器条件:
- 在或
try-catch-finally
语句的try-catch
catch 子句中。 - 作为语句中的
switch
案例警卫。 - 作为表达式中的
switch
case guard。
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;
}
}
}