when (referencia de C#)
La palabra clave contextual when
se usa para especificar una condición de filtro en los siguientes contextos:
- En una cláusula catch de una instrucción
try-catch
otry-catch-finally
. - Como restricción de caso en la instrucción
switch
. - Como restricción de caso en la expresión
switch
.
when
en una cláusula catch
La palabra clave when
puede usarse en una cláusula para especificar una condición que debe cumplirse para que el controlador de una excepción específica se ejecute. Su sintaxis es:
catch (ExceptionType [e]) when (expr)
donde expr es una expresión que se evalúa como un valor booleano. Si devuelve true
, el controlador de excepciones se ejecuta; si devuelve false
, no se ejecuta.
En el ejemplo siguiente se usa la palabra clave when
para ejecutar condicionalmente controladores para una HttpRequestException según el texto del mensaje de excepción.
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;
}
}
}