Una sinfonía en C#

Un pequeño aporte a la comunidad de habla hispana.

Novedades de C#6: Exception filters

Otra de las novedades que nos trae C#6 son los Exception filters, básicamente es la capacidad de agregar una cláusula a un bloque catch que nos permite “filtrar” las excepciones que serán atrapadas por ese bloque basados en alguna condición, por ejemplo en el mensaje de la excepción, o alguna propiedad interna, veamos un ejemplo:

try
{
    throw new MyException(600);
}
//podemos filtrar las excepciones del mismo tipo a partir
//de una condición
catch (MyException ex) when (ex.Code == 400)
{
    Console.WriteLine("Bad Request");
}
catch (MyException ex) when (ex.Code == 401)
{
    Console.WriteLine("Unauthorized");
}
catch (MyException ex) when (ex.Code == 403)
{
    Console.WriteLine("Forbidden");
}
catch (MyException ex) when (ex.Code == 404)
{
    Console.WriteLine("Not Found");
}
//este catch atrapa las exception del cliente, entre 400 y 500
catch (MyException ex) when (ex.Code >= 400 && ex.Code < 500)
{
    Console.WriteLine("Client exception");
}
//en caso de no cumplirse ninguna de las otras condiciones
//siempre podemos tener un catch más general
catch (MyException)
{
    Console.WriteLine("Generic Exception");
}


¿Simple no? básicamente el tipo MyException representaría excepciones HTTP (no vamos a discutir si está bien hacerlo así, es un ejemplo) que tienen dentro el HTTP Status code correspondiente al error, entonces para mostrar un mensaje más simpático al cliente hacemos el fitro a partir de la propiedad Code del tipo MyException (este patrón de códigos se ve bastante en bases de datos), también tenemos una condición para las exceptiones entre 400 y 500 (las del cliente) en la cual únicamente caen aquellas no atrapadas por las condiciones anteriores más expecífica, por último tenemos un catch general para el tipo en donde caerán aquellos códigos cliente que no están más arriba.

Muy interesante, nos leemos.

Loading