Un problème courant dans n'importe quel langage est d'affirmer que les paramètres envoyés à une méthode répondent à vos exigences, et si ce n'est pas le cas, d'envoyer des messages d'erreur agréables et informatifs. Ce type de code est répété à l'infini, et nous essayons souvent de créer des aides à cet effet. Cependant, en C#, il semble que ces aides soient obligées de faire face à une certaine duplication qui nous est imposée par le langage et le compilateur. Pour montrer ce que je veux dire, laissez-moi vous présenter du code brut sans aide, suivi d'une aide possible. Ensuite, je soulignerai la duplication dans l'aide et formulerai ma question de manière précise.
Tout d'abord, le code sans aucune aide :
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
}
}
Maintenant, le code avec une tentative raisonnable d'aide :
public void SomeMethod(string firstName, string lastName, int age)
{
Helper.Validate( x=> x !=null, "firstName", firstName);
Helper.Validate( x=> x!= null, "lastName", lastName);
}
La question principale est la suivante : Remarquez comment le code doit passer la valeur du paramètre et le nom du paramètre ("firstName") et firstName). Ainsi, le message d'erreur peut dire "Bla bla bla, la valeur de l'attribut premierNom paramètre". Avez-vous trouvé un moyen de contourner ce problème en utilisant la réflexion ou autre chose ? Ou un moyen de le rendre moins pénible ?
Et plus généralement, avez-vous trouvé d'autres moyens de rationaliser cette tâche de validation des paramètres tout en réduisant la duplication du code ?
EDIT : J'ai lu des personnes parler de l'utilisation de la propriété Parameters, mais je n'ai jamais trouvé de moyen de contourner la duplication. Quelqu'un a eu de la chance avec ça ?
Merci !