Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Verwenden Sie das when kontextbezogene Schlüsselwort, um eine Filterbedingung in den folgenden Kontexten anzugeben:
- In einer Catch-Klausel einer
try-catchodertry-catch-finallyAnweisung. - Als Case Guard in der
switchAnweisung. - Als Fallschutz im
switchAusdruck.
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;
}
}
}