Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use a when palavra-chave contextual para especificar uma condição de filtro nos seguintes contextos:
- Em uma cláusula catch de uma
try-catchoutry-catch-finallyinstrução. - Como um guarda de caso na
switchinstrução. - Como um protetor de maiúsculas e minúsculas na
switchexpressão.
A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.
A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.
Dica
Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.
when em uma cláusula catch
Use a when palavra-chave em uma cláusula catch para especificar uma condição que deve ser verdadeira para o manipulador para que uma exceção específica seja 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 retornará.
Os filtros de exceção com a when palavra-chave fornecem várias vantagens em relação às abordagens tradicionais de tratamento de exceção, incluindo melhores benefícios de desempenho e suporte de depuração. 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 de exceção tradicional.
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;
}
}
}