Hay momentos en que tendré que modificar un valor pasado a un método desde el propio método. Un ejemplo sería desinfectar una cadena como este método aquí:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Esto es puramente inofensivo ya que el Name
argumento no se pasa por referencia. Sin embargo, si, por alguna razón, un desarrollador en el futuro decide que todos los valores pasen por ref, cualquier desinfección de la cadena afectará el valor fuera del método, lo que podría tener resultados perjudiciales.
Por lo tanto, en lugar de reasignar el argumento en sí, siempre creo una copia local como esta:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Esto garantiza que el cambio en la forma en que se pasa el valor nunca afectará los acontecimientos fuera del método, pero me pregunto si estoy siendo demasiado paranoico al respecto.
if (param == NULL) param = default_value;
?
by ref
que no se pasó de antemano y, por lo tanto, al convertir el acceso local a un acceso no local por alguna razón, siempre tiene que verificar las consecuencias cuidadosamente.
Name = Name.ToUpper();
hace que el código sea más difícil de seguir en la cabeza como el valor de losName
cambios. Su segundo ejemplo no solo es más a prueba de futuro, es más fácil razonar lo que está haciendo.