when (Referência de C#)
Você usa a palavra-chave contextual when
para especificar uma condição de filtro nos seguintes contextos:
- Em uma cláusula catch de uma instrução
try-catch
outry-catch-finally
. - Como uma proteção de maiúsculas e minúsculas na instrução
switch
. - Como uma proteção de maiúsculas e minúsculas na expressão
switch
.
when
em uma cláusula catch
A palavra-chave when
pode ser usada em uma instrução catch para especificar uma condição que deve ser verdadeira para o manipulador para uma exceção específica a ser executada. Sua sintaxe é:
catch (ExceptionType [e]) when (expr)
em que expr é uma expressão que é avaliada como um valor booliano. Se ele retornar true
, o manipulador de exceção será executado, se false
, não executará.
O exemplo a seguir usa a palavra-chave when
para executar os manipuladores condicionalmente para um HttpRequestException dependendo do texto da mensagem de exceção.
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;
}
}
}