Compartilhar via


quando (referência de C#)

Use a when palavra-chave contextual para especificar uma condição de filtro nos seguintes contextos:

when em uma cláusula catch

A when palavra-chave pode ser usada 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;
        }
    }
}

Consulte também