when(C# 参考)
本文内容
使用上下文关键字 when
在以下上下文中指定筛选条件:
- 在 try-catch 或 try-catch-finally 语句的 catch 子句中。
- 作为
switch
语句中的 case guard。 - 作为
switch
表达式中的 case guard。
catch 子句中的 when
可在 catch 子句中使用 when
关键字来指定一个条件,此条件必须为 true,才能执行特定异常的处理程序。 语法为:
C#
catch (ExceptionType [e]) when (expr)
其中,expr 是一个表达式,其计算结果为布尔值。 如果该表达式返回 true
,则执行异常处理程序;如果返回 false
,则不执行。
以下示例使用 when
关键字有条件地执行 HttpRequestException 的处理程序,具体取决于异常消息的文本内容。
<code class="lang-csharp" data-author-content='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; } }
} '>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; } }
}