Ci sono momenti in cui dovrò modificare un valore passato in un metodo all'interno del metodo stesso. Un esempio potrebbe essere la sanificazione di una stringa come questo metodo qui:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Questo è puramente innocuo poiché l' Name
argomento non viene passato per riferimento. Tuttavia, se, per qualche motivo, in futuro uno sviluppatore decide di far passare tutti i valori da ref, qualsiasi sanificazione della stringa influirà sul valore esterno al metodo che potrebbe avere risultati dannosi.
Pertanto, invece di riassegnare l'argomento stesso, creo sempre una copia locale in questo modo:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Questo assicura che la modifica della trasmissione del valore non influirà mai sull'andamento del metodo, ma mi chiedo se sono eccessivamente paranoico al riguardo.
if (param == NULL) param = default_value;
?
by ref
che non è stato passato molto prima, e quindi convertendo l'accesso locale in un accesso non locale per qualche motivo, deve sempre controllare attentamente le conseguenze.
Name = Name.ToUpper();
rende il codice più difficile da seguire nella tua testa come valore delleName
modifiche. Il tuo secondo esempio non è solo più a prova di futuro, è più facile ragionare su ciò che sta facendo.