# 异常筛选器 关键字 `when` 可用于 语句中 `catch` ,以指定处理程序必须为 true 的条件才能执行特定的异常。 语法为: ```csharp catch (ExceptionType [e]) when (expr) ``` 其中,expr 是一个表达式,其计算结果为布尔值。 如果该表达式返回 true,则执行异常处理程序;如果返回 false,则不执行。 以下示例使用 when 关键字有条件地执行 HttpRequestException 的处理程序,具体取决于异常消息的文本内容。 ```csharp using System; using System.Net.Http; using System.Threading.Tasks; class Program { static void Main() { Console.WriteLine(MakeRequest().Result); } public static async Task 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 (______________) { return "Page Not Found"; } catch (HttpRequestException e) { return e.Message; } } } ``` 请阅读上方代码,补全空格中的内容,以下哪个选项合适? ## 答案 ```csharp e.Message.Contains("404") ``` ## 选项 ### A ```csharp e.Message.Contains("500") ``` ### B ```csharp e is null ``` ### C ```csharp e is not null ```