您可以使用 when 內容關鍵字,在下列內容中指定篩選條件:
- 在或
try-catch語句的try-catch-finallycatch 子句中。 - 做為語句中的
switch案例後衛。 - 做為表達式中的
switch案例防護。
when 在 catch 子句中
when關鍵詞可用於 catch 子句中,以指定要執行之特定例外狀況之處理程式必須為 true 的條件。 其語法為:
catch (ExceptionType [e]) when (expr)
其中 expr 是評估為布爾值的表達式。 如果傳回 true,則會執行例外狀況處理程式;如果 false為 ,則為 。
與傳統的異常處理方法相比,帶有關鍵字的 when 異常過濾器提供了多種優勢,包括更好的偵錯支援和效能優勢。 如需例外狀況篩選如何保留呼叫堆疊並改善偵錯的詳細說明,請參閱 例外狀況篩選與傳統例外狀況處理。
下列範例會使用 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;
}
}
}