Dela via


when (C#-referens)

Använd det kontextuella nyckelordet when för att ange ett filtervillkor i följande kontexter:

C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.

Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.

Tips/Råd

Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.

when i en catch-sats

Använd nyckelordet when 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;
        }
    }
}

Se även