Há momentos em que precisarei modificar um valor passado para um método de dentro do próprio método. Um exemplo seria desinfetar uma string como este método aqui:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Isso é puramente inofensivo, pois o Name
argumento não está sendo transmitido por referência. No entanto, se, por algum motivo, um desenvolvedor decidir no futuro passar todos os valores por ref, qualquer higienização da string afetará o valor fora do método, o que pode ter resultados negativos.
Portanto, em vez de reatribuir ao próprio argumento, eu sempre crio uma cópia local assim:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Isso garante que a alteração do valor transmitido nunca afetará o andamento fora do método, mas estou me perguntando se estou sendo excessivamente paranóico sobre isso.
if (param == NULL) param = default_value;
?
by ref
que não foi aprovado de maneira antecipada e, portanto, convertendo o acesso local em um acesso não local por algum motivo, ele sempre deve verificar as consequências com cuidado.
Name = Name.ToUpper();
torna o código mais difícil de seguir em sua mente conforme o valor dasName
alterações. Seu segundo exemplo não é apenas mais à prova de futuro, é mais fácil entender o que está fazendo.