Un problema común en cualquier idioma es afirmar que los parámetros enviados a un método cumplen con sus requisitos, y si no lo hacen, enviar mensajes de error agradables e informativos. Este tipo de código se repite una y otra vez, y a menudo intentamos crear ayuda para él. Sin embargo, en C#, parece que esos ayudantes se ven obligados a lidiar con alguna duplicación impuesta sobre nosotros por el lenguaje y el compilador. Para mostrar lo que quiero decir, permítanme presentar algunos códigos en bruto sin ayudantes, seguidos de un posible ayudante. Luego, señalaré la duplicación en el ayudante y formularé mi pregunta con precisión.¿Cuál es la sintaxis más suave y atractiva que ha encontrado para afirmar la corrección de parámetros en C#?
En primer lugar, el código sin ningún ayudantes:
public void SomeMethod(string firstName, string lastName, int age)
{
if(firstName == null)
{
throw new WhateverException("The value for firstName cannot be null.");
}
if(lastName == null)
{
throw new WhateverException("The value for lastName cannot be null.");
}
// Same kind of code for age, making sure it is a reasonable range (< 150, for example).
// You get the idea
}
}
Ahora, el código con un intento razonable de un ayudante:
public void SomeMethod(string firstName, string lastName, int age)
{
Helper.Validate(x=> x !=null, "firstName", firstName);
Helper.Validate(x=> x!= null, "lastName", lastName);
}
La principal la pregunta es esta: Observe cómo debe pasar el código s el valor del parámetro y el nombre del parámetro ("firstName" y firstName). Esto es para que el mensaje de error pueda decir: "Bla, bla, bla, el valor del parámetro firstName ". ¿Has encontrado alguna forma de evitar esto usando el reflejo o cualquier otra cosa? ¿O una forma de hacerlo menos doloroso?
Y, en términos más generales, ¿ha encontrado otras formas de simplificar esta tarea de validación de parámetros mientras reduce la duplicación de código?
EDIT: He leído a personas que hablan acerca de hacer uso de la propiedad Parámetros, pero que nunca han encontrado una forma de evitar la duplicación. Alguien tiene suerte con eso?
Gracias!
El uso de 'no se recomienda ApplicationException' clase. –
Nitpicking: _Direct_ no se recomienda el uso de 'ApplicationException' –
OK, lo cambié a Exception, solo para evitar distracciones.Por otro lado, si la recomendación se basa en los comentarios de los chicos que escribieron el libro "Pautas marco", entonces no estoy muy convencido (aunque esos tipos han escrito algunas cosas buenas). Pero esa es una discusión para otro día. –