Teilen über


wann (C#-Referenz)

Verwenden Sie das when kontextbezogene Schlüsselwort, um eine Filterbedingung in den folgenden Kontexten anzugeben:

Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.

In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.

Tipp

Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.

when in einer Catch-Klausel

Verwenden Sie das when Schlüsselwort in einer Catch-Klausel, um eine Bedingung anzugeben, die für den Handler für eine bestimmte Auszuführende Ausnahme wahr sein muss. Die Syntax lautet:

catch (ExceptionType [e]) when (expr)

dabei handelt es sich um einen Ausdruck, der zu einem booleschen Wert ausgewertet wird. Wenn er zurückgibt true, wird der Ausnahmehandler ausgeführt; wenn false, ist dies nicht der Fehler.

Ausnahmefilter mit dem when Schlüsselwort bieten mehrere Vorteile gegenüber herkömmlichen Ausnahmebehandlungsansätzen, einschließlich besserer Debuggingunterstützung und Leistungsvorteile. Eine ausführliche Erläuterung dazu, wie Ausnahmefilter den Aufrufstapel beibehalten und das Debuggen verbessern, finden Sie unter Ausnahmefilter im Vergleich zur herkömmlichen Ausnahmebehandlung.

Im folgenden Beispiel wird das when Schlüsselwort verwendet, um Handler für einen HttpRequestException abhängigen Text der Ausnahmemeldung bedingt auszuführen.

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

Siehe auch