Sdílet prostřednictvím


when (referenční dokumentace jazyka C#)

Pomocí kontextového klíčového when slova zadejte podmínku filtru v následujících kontextech:

Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.

Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.

Návod

Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.

when v klauzuli catch

Pomocí klíčového when slova v klauzuli catch zadejte podmínku, která musí být pravdivá pro obslužnou rutinu pro konkrétní výjimku ke spuštění. Jeho syntaxe je:

catch (ExceptionType [e]) when (expr)

where výraz je výraz, který se vyhodnotí jako logická hodnota. Pokud se vrátí true, obslužná rutina výjimky se spustí, pokud falsene.

Filtry výjimek s klíčovým slovem when poskytují několik výhod oproti tradičním přístupům pro zpracování výjimek, včetně lepší podpory ladění a výhod výkonu. Podrobné vysvětlení toho, jak filtry výjimek zachová zásobník volání a zlepšují ladění, najdete v tématu Filtry výjimek vs. tradiční zpracování výjimek.

Následující příklad používá when klíčové slovo k podmíněnému spouštění obslužných rutin pro v HttpRequestException závislosti na textu zprávy výjimky.

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;
        }
    }
}

Viz také