when (C#-Referenz)
Sie verwenden das kontextabhängige Schlüsselwort when
, um in den folgenden Kontexten eine Filterbedingung anzugeben:
- In einer Catch-Klausel einer
try-catch
odertry-catch-finally
Anweisung. - Als Case Guard in der
switch
-Anweisung. - Als Case Guard im
switch
-Ausdruck.
when
in einer Catch-Klausel
Das Keyword when
kann in einer Catch-Klausel verwendet werden, um eine Bedingung anzugeben, deren Wert für den Handler „TRUE“ lauten muss, damit eine bestimmte Ausnahme ausgeführt wird. Die Syntax lautet:
catch (ExceptionType [e]) when (expr)
where expr ist ein Ausdruck, der einen booleschen Wert ergibt. Wenn true
zurückgegeben wird, wird der Ausnahmehandler ausgeführt; wenn false
zurückgegeben wird, nicht.
Im folgenden Beispiel wird das Schlüsselwort when
verwendet, um Handler abhängig vom Text der Ausnahmemeldung für HttpRequestException 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;
}
}
}