Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du använder det kontextuella nyckelordet when för att ange ett filtervillkor i följande kontexter:
- I en catch-sats i en eller try-catch-try-catch-finallyinstruktion.
- Som skiftvakt i -instruktionenswitch.
- Som skiftlägesskydd i uttrycketswitch.
              when i en catch-sats
Nyckelordet when kan användas i en catch-sats för att ange ett villkor som måste vara sant för att hanteraren ska kunna köra ett specifikt undantag. Syntaxen är:
catch (ExceptionType [e]) when (expr)
där expr är ett uttryck som utvärderas till ett booleskt värde. Om den returnerar truekörs undantagshanteraren. Om false, så gör den inte det.
Undantagsfilter med nyckelordet when ger flera fördelar jämfört med traditionella metoder för undantagshantering, inklusive bättre felsökningsstöd och prestandafördelar. En detaljerad förklaring av hur undantagsfilter bevarar anropsstacken och förbättrar felsökningen finns i Undantagsfilter jämfört med traditionell undantagshantering.
I följande exempel används nyckelordet when för att villkorligt köra hanterare för en HttpRequestException beroende på texten i undantagsmeddelandet.
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;
        }
    }
}