when (Riferimento C#)
È possibile usare la parola chiave contestuale when
per specificare una condizione di filtro nei seguenti contesti:
- In una clausola catch di un'istruzione
try-catch
otry-catch-finally
. - Come una clausola guard del caso nell'istruzione
switch
. - Come una clausola guard del caso nell'espressione
switch
.
when
in una clausola catch
La parola chiave when
può essere usata in una clausola catch per specificare una condizione che deve essere vera per eseguire il gestore di una determinata eccezione. La relativa sintassi è la seguente:
catch (ExceptionType [e]) when (expr)
dove expr è un'espressione che dà come risultato un valore booleano. Se restituisce true
, il gestore di eccezioni viene eseguito, se restituisce false
, non viene eseguito.
Nell'esempio seguente viene usata la parola chiave when
per eseguire in modo condizionale i gestori per un elemento HttpRequestException in base al testo del messaggio dell'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;
}
}
}