when (Riferimento C#)

È possibile usare la parola chiave contestuale when per specificare una condizione di filtro nei seguenti contesti:

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;
        }
    }
}

Vedi anche