Бувають випадки, коли мені потрібно буде змінити значення, передане в метод, із самого методу. Прикладом може бути санітація рядка типу цього методу:
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змін. Ваш другий приклад - це не тільки більш впевнений у майбутньому, простіше міркувати, що він робить.