Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kontextové klíčové slovo použijete when k určení podmínky filtru v následujících kontextech:
- V klauzuli catch příkazu
try-catchnebotry-catch-finallypříkazu. - Jako případová stráž v
switchpříkazu. - Jako případová ochrana ve výrazu
switch.
when v klauzuli catch
Klíčové when slovo lze použít v klauzuli catch k určení podmínky, která musí být pravdivá pro obslužnou rutinu pro konkrétní výjimku ke spuštění. Jeho syntaxe je:
catch (ExceptionType [e]) when (expr)
where výraz je výraz, který se vyhodnotí jako logická hodnota. Pokud se vrátí true, obslužná rutina výjimky se spustí, pokud falsene.
Filtry výjimek s klíčovým slovem when poskytují několik výhod oproti tradičním přístupům pro zpracování výjimek, včetně lepší podpory ladění a výhod výkonu. Podrobné vysvětlení toho, jak filtry výjimek zachová zásobník volání a zlepšují ladění, najdete v tématu Filtry výjimek vs. tradiční zpracování výjimek.
Následující příklad používá when klíčové slovo k podmíněnému spouštění obslužných rutin pro v HttpRequestException závislosti na textu zprávy výjimky.
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;
}
}
}