Есть моменты, когда мне нужно изменить значение, переданное в метод изнутри самого метода. Примером может служить очистка строки, такой как этот метод, здесь:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Это чисто безвредно, поскольку Name
аргумент не передается по ссылке. Однако, если по какой-либо причине разработчик в будущем решит передать все значения по ссылке, любая очистка строки повлияет на значение вне метода, что может привести к отрицательным результатам.
Поэтому вместо переназначения самого аргумента я всегда создаю локальную копию следующим образом:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Это гарантирует, что изменение значения, в которое передается значение, никогда не повлияет на действия вне метода, но мне интересно, насколько я чрезмерно параноидален в этом.
if (param == NULL) param = default_value;
?
by ref
которое не было передано, Заранее, и поэтому, преобразовывая локальный доступ в нелокальный доступ по какой-то причине, он всегда должен тщательно проверять последствия.
Name = Name.ToUpper();
делает код труднее следовать в вашей голове, как значениеName
изменений. Ваш второй пример не только более ориентирован на будущее, но и легче рассуждать о том, что он делает.