Пример ниже может не быть проблематичным, как есть, но этого должно быть достаточно, чтобы проиллюстрировать точку. Представьте себе, что работы намного больше, чем обрезка.
public string Thingy
{
set
{
// I guess we can throw a null reference exception here on null.
value = value.Trim(); // Well, imagine that there is so much processing to do
this.thingy = value; // That this.thingy = value.Trim() would not fit on one line
...
Итак, если присвоение должно занимать две строки, то мне нужно либо злоупотребить повторным использованием параметра, либо создать временную переменную. Я не большой поклонник временных переменных. С другой стороны, я не фанат запутанного кода. Я не включил пример, где задействована функция, но я уверен, что вы можете себе это представить. У меня есть одна проблема: если функция приняла строку, а параметр был «злоупотреблен», а затем кто-то изменил подпись на ref
в обоих местах - это должно все испортить, но ... кто бы сознательно сделал такой поменять если уже работало без реф? Похоже, это их ответственность в этом случае. Если я запутался со значением value
, я делаю что-то нетривиальное под капотом? Если вы считаете, что оба подхода приемлемы, то какой из них вы предпочитаете и почему?
Спасибо.
Редактировать : Вот что я имею в виду, когда говорю, что я не фанат временных переменных. Мне не нравится такой код:
string userName = userBox.Text;
if (userName.Length < 5) {
MessageBox.Show("The user name " + userName + " that you entered is too short.");
....
Опять же, это может быть не лучшим способом сообщить о проблеме пользователю, но это просто иллюстрация. В моем случае переменная userName
не нужна, по моему сильному мнению. Я не всегда против временных переменных, но когда их использование очень ограничено, и они не экономят столько времени при наборе текста, я настоятельно предпочитаю не использовать их.