有没有foo = foo有意义的有效情况?

时间:2011-03-03 10:38:18

标签: c# refactoring legacy

清理我继承的C#项目上的一些警告,我找到了这段代码:

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

我显然在不考虑太多的情况下刻录了else块,只是想知道为什么以前的程序员已经离开了那个部分。

  • 删除它是否太懒了?
  • 对于一些未来的程序员来说,在特定更改的情况下保存一些打字是否礼貌?
  • 隐藏着危险的东西吗?

在您看来,有foo=foo有意义的有效情况吗?


有关_WriteValue方法的更多详细信息:

_WriteValue方法包含在传递给WriteValue参数的不同重载object FieldValue方法中,以下类型的值:intlongstringDatetime

7 个答案:

答案 0 :(得分:5)

如果FieldValue是属性,set运算符可以触发某些代码,那么在这种情况下自我赋值是否有意义?!

一个例子是:

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

(我的回答是在海报添加FieldValue实际上是方法参数的信息之前给出的,而不是我先假设的属性)

答案 1 :(得分:2)

有一些不好的程序员,他们通常会留下一些垃圾......

答案 2 :(得分:1)

如果FieldValue后面有吸气剂或固定剂,那么它可能会产生副作用。例如:

private double myFieldValue;

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

使用具有副作用的吸气剂是非常糟糕的做法。然而,有很多副作用很常见,因为这些副作用不像我的例子那样剧烈!

答案 3 :(得分:1)

程序员可能没有意识到条件断点的存在,并利用该语句作为放置有条件触发的断点的位置。

为了说清楚,我并不是说这是一个好主意,但在没有条件断点的环境中这是一个技巧。

答案 4 :(得分:0)

在C ++中,您可以定义operator=来执行任何操作:)

答案 5 :(得分:0)

存在一些低级硬件情况,其中设置值具有(期望的)副作用,这些副作用无法以其他方式调用。这是愚蠢的,但超出了程序员修复的范围。我只是在裸C代码中看到过这种情况,所以我确信这不是你在C#代码中看到这个的原因,但它确实发生了。

答案 6 :(得分:0)

请注意,这是一个非常好的(也是非常常见的)你应该评论的事情的例子:任何“明显的”“修复”实际上会破坏的东西。确保你从挫折中学习!