Il y a des moments où je devrai modifier une valeur passée dans une méthode à partir de la méthode elle-même. Un exemple serait d'assainir une chaîne telle que cette méthode ici:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Ceci est purement inoffensif car l' Name
argument n'est pas transmis par référence. Cependant, si, pour une raison quelconque, un développeur décide à l'avenir de faire passer toutes les valeurs par ref, tout nettoyage de la chaîne affectera la valeur en dehors de la méthode, ce qui pourrait avoir des résultats préjudiciables.
Par conséquent, au lieu de réaffecter à l'argument lui-même, je crée toujours une copie locale comme ceci:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Cela garantit que la modification de la valeur ne sera jamais affectée en dehors de la méthode, mais je me demande si je suis excessivement paranoïaque à ce sujet.
if (param == NULL) param = default_value;
?
by ref
qui n'a pas été transmise, manière préalable, et donc de convertir un accès local en un accès non local pour une raison quelconque, il doit toujours en vérifier soigneusement les conséquences.
Name = Name.ToUpper();
rend le code plus difficile à suivre dans votre tête car la valeur desName
changements. Votre deuxième exemple est non seulement plus évolutif, il est plus facile de raisonner ce qu'il fait.