Поделиться через


when (справочник по C#)

Используйте контекстное ключевое when слово, чтобы указать условие фильтра в следующих контекстах:

Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.

Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.

Подсказка

Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.

when в предложении catch

Используйте ключевое when слово в предложении catch, чтобы указать условие, которое должно соответствовать обработчику для выполнения определенного исключения. Синтаксис:

catch (ExceptionType [e]) when (expr)

где expr — это выражение, которое оценивает логическое значение. Если он возвращается true, обработчик исключений выполняется; если falseон не выполняется.

Фильтры исключений с ключевым словом предоставляют несколько преимуществ по сравнению с when традиционными подходами к обработке исключений, включая более эффективную поддержку отладки и преимущества производительности. Подробное описание того, как фильтры исключений сохраняют стек вызовов и улучшают отладку, см . в статьях "Фильтры исключений" и традиционная обработка исключений.

В следующем примере ключевое слово используется 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;
        }
    }
}

См. также