when (справочник по C#)
Чтобы указать условие фильтра в следующих контекстах, можно использовать контекстное ключевое слово when
:
- В предложении catch для оператора
try-catch
илиtry-catch-finally
оператора. - В качестве условия случая в операторе
switch
. - В качестве условия случая в выражении
switch
.
when
в предложении catch
when
Ключевое слово можно использовать в предложении catch, чтобы указать условие, которое должно быть true для обработчика для выполнения определенного исключения. Синтаксис:
catch (ExceptionType [e]) when (expr)
здесь expr представляет собой выражение, которое оценивает значение типа Boolean. Если он возвращает 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;
}
}
}