sábado, 5 de diciembre de 2015

Como hacer fácil el lanzar ArgumentNullException

Como todos sabéis es una buena práctica validar que los parámetros que se pasan a una función o a un método y que no pueden ser nulos se validen y si son nulos en .net se debería lanzar un ArgumentNullException
Pero escribir ese código es un coñazo repetitivo. Pero ¿Y si nos hacemos una utilidad que nos facilite el trabajo? Tomando prestada una idea de Jon Skeet me he hecho un método extensor que lanza el error si el parámetro es nulo.
El código es así:

        public static T ThrowIfNull <T> (this T reference, string parameterName)
{
if (reference == null)
throw new ArgumentNullException(parameterName);
else
return reference;
}

Imaginaos un constructor al que le inyectamos algo para luego asignárselo, a una propiedad de solo lectura. Pues se usaría así:
        public DataContext (IDbConnection conn)
{
this.conn = conn.ThrowIfNull(nameof(conn));
}

Al aplicar una interfaz fluida, permite hacer la validación y la asignación en la misma línea. Por otro lado al usar el nameof de C#6 evitamos cometer errores al indicar el nombre del parámetro.
Quizás la única contra que le veo es que en el StackTrace de la excepción aparecerá que la línea donde se lanza es la del método extensor, pero en la siguiente línea de la pila de llamadas se verá donde falla realmente.
Creo que puedo vivir con ello a cambio de una gran comodidad y ahorrarme unos cuantos ifs y thorws.

No hay comentarios:

Publicar un comentario