Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Use a when palavra-chave contextual para especificar uma condição de filtro nos seguintes contextos:
- Em uma cláusula de captura de uma
try-catchoutry-catch-finallydeclaração. - Como guarda de
switchcaso no depoimento. - Como guarda de caso na
switchexpressão.
A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.
A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.
Sugestão
Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.
when numa cláusula de captura
Use a when palavra-chave numa cláusula catch para especificar uma condição que deve ser verdadeira para o handler para que uma exceção específica seja executada. Sua sintaxe é:
catch (ExceptionType [e]) when (expr)
onde expr é uma expressão que é avaliada como um valor booleano. Se devolver true, o tratador de exceções executa; se false, não executa.
Os filtros de exceção com a palavra-chave oferecem várias vantagens em relação às when abordagens tradicionais de tratamento de exceções, incluindo melhor suporte à depuração e benefícios de desempenho. Para obter uma explicação detalhada de como os filtros de exceção preservam a pilha de chamadas e melhoram a depuração, consulte Filtros de exceção versus tratamento tradicional de exceções.
O exemplo a seguir usa a when palavra-chave para executar condicionalmente manipuladores 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;
}
}
}