Существуют ли действительные обстоятельства, когда foo = foo имеет смысл? - PullRequest
4 голосов
/ 03 марта 2011

Очистка нескольких предупреждений в проекте C#, который я унаследовал, обнаружил следующий фрагмент кода:

private bool _WriteValue(object FieldValue,..,..)
  ...
  if(MultipFactor!=1)
     FieldValue=((double)FieldValue)*MultipFactor;
  else
    FieldValue=FieldValue;

Я явно сжег блок else, не слишком задумываясь, просто удивляясь, почему предыдущий программист оставил эту часть.

  • Было просто лень его удалить?
  • Было ли вежливостью для некоторых будущих программистов сохранять набор текста в случае конкретных изменений?
  • Это скрывает что-то опасное?

По вашему мнению, существуют ли действительные обстоятельства, в которых foo=foo имеет смысл?


Еще несколько подробностей о методе _WriteValue:

Метод _WriteValue заключен в различные перегруженные методы WriteValue, которые передают параметру object FieldValue значения следующих типов: int, long, string и Datetime.

Ответы [ 7 ]

5 голосов
/ 03 марта 2011

Если FieldValue является свойством, оператор set может вызвать некоторый код, поэтому в таком случае может иметь смысл самопредставление?!

Примером может быть:

public string FieldValue
{
    get
    {
        return _fieldValue;
    }
    set
    {
        _fieldValue = value;
        Trace.WriteLine( string.Format("Received value '{0}'.", value ) );
    }
}

(Мой ответ был дан до того, как автор добавил информацию о том, что FieldValue на самом деле является параметром метода, а не свойством, как я предполагал первым)

2 голосов
/ 03 марта 2011

Есть плохие программисты, и они обычно оставляют за собой мусор ...

1 голос
/ 03 марта 2011

Программист, вероятно, не знал о существовании условных точек останова и использовал это утверждение в качестве места для размещения точки останова, которая сработала условно.

Просто чтобы прояснить, я не говорю, чтоЭто хорошая идея, но это уловка в средах без условных точек останова.

1 голос
/ 03 марта 2011

Если за FieldValue стоит геттер или сеттер, то это может иметь побочные эффекты. Например:

private double myFieldValue;

public double FieldValue
{
    get { return myFieldValue; }
    set { myFieldValue = value; ReformatSystemVolume(); }
}

Чрезвычайно плохая практика иметь добытчика с побочными эффектами. Тем не менее, очень часто у сеттеров есть побочные эффекты, хотя реже эти побочные эффекты бывают такими же радикальными, как в моем примере!

0 голосов
/ 03 марта 2011

Обратите внимание, что это потрясающий (и слишком распространенный) пример того, что вы должны прокомментировать: все, что «очевидное» «исправление» на самом деле сломает. Убедитесь, что вы учитесь на своих разочарованиях

0 голосов
/ 03 марта 2011

В некоторых аппаратных ситуациях низкого уровня установка значения имеет (желательные) побочные эффекты, которые не могут быть вызваны другими способами. Это глупо, но программисты не могут это исправить. Я видел эту ситуацию только в голом C-коде, так что я уверен, что это не то, почему вы видите это в C # -коде, но это действительно так.

0 голосов
/ 03 марта 2011

В C ++ вы можете определить operator=, чтобы делать все, что вы хотите:)

...