Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare la when parola chiave contestuale per specificare una condizione di filtro nei contesti seguenti:
- In una clausola catch di un'istruzione
try-catchotry-catch-finally. - Come guardia del casonell'istruzione
switch. - Come case guardnell'espressione
switch.
when in una clausola catch
La when parola chiave può essere utilizzata in una clausola catch per specificare una condizione che deve essere true per il gestore per l'esecuzione di un'eccezione specifica. La sintassi è:
catch (ExceptionType [e]) when (expr)
dove expr è un'espressione che restituisce un valore booleano. Se restituisce true, il gestore eccezioni viene eseguito; se false, non .
I filtri delle eccezioni con la when parola chiave offrono diversi vantaggi rispetto agli approcci tradizionali di gestione delle eccezioni, tra cui vantaggi migliori per il debug e le prestazioni. Per una spiegazione dettagliata del modo in cui i filtri delle eccezioni mantengono lo stack di chiamate e migliorano il debug, vedere Filtri eccezioni e gestione delle eccezioni tradizionali.
Nell'esempio seguente viene utilizzata la when parola chiave per eseguire i gestori in modo condizionale per un oggetto HttpRequestException a seconda del testo del messaggio di eccezione.
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;
}
}
}