2011-03-03 101 views
4

清洁警告一小撮上C#项目我继承,我发现这个代码片段:foo = foo有意义吗?

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

我明明burninated的else块没有想到太多,只是想知道为什么以前的程序员已经离开了部分。

  • 只是懒得删除它吗?
  • 对于某些未来的程序员来说,在特定更改的情况下保存某些输入是否有礼貌?
  • 它隐藏了危险的东西吗?

在您看来,有没有任何有效的情况下foo=foo是合理的?


_WriteValue方法更多的细节:

_WriteValue方法被包裹成不同的重载WriteValue方法其传递给object FieldValue参数,以下类型的值:intlongstringDatetime

+1

Fieldvalue的属性setter是否有任何副作用? – 2011-03-03 10:48:45

+1

如果是我,我只是摆脱'如果'并且每次都乘以! – 2011-03-03 14:35:22

回答

5

如果FieldValue是一个属性,该set运营商可能会引发一些代码,所以自赋值可能意义在这样的情况下, ?!

一个例子是:

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

(被给我的答案之前海报补充说FieldValue实际上是一个方法的参数,而不是我首先假定一个属性的信息)

+2

但是,这会打开一堆蠕虫,物业的副作用,哇!如果没有人知道这些副作用是什么,它对任何人都是没有意义的。 – 2011-03-03 10:41:13

+0

@Mr。是的,我同意,我只是猜测一个使用场景:-) – 2011-03-03 10:42:10

+1

@systempuntoout当然。请注意,我的回复是针对您的文章,在添加了“FieldValue”实际上是方法参数而不是我首先假设的属性之前的信息。 – 2011-03-03 15:10:35

2

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

0

在C++你可以定义operator=来做你想做的任何事情:)

+0

在C#中你不能,至少不能用于赋值操作符。在C#中只有一元,二元和关系运算符可以被重载。 – 2011-03-03 10:43:39

+1

C++在哪里出现这个问题? – 2011-03-03 10:54:18

+0

也许代码是从C++移植过来的,因此从最初那里复制了=运算符被重载的地方。所以如果情况确实如此,功能可能会被破坏。 – mike 2011-03-03 11:26:02

1

如果在FieldValue后面有一个吸气剂或二通,那么它可能会有副作用。例如:

private double myFieldValue; 

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

让吸气剂产生副作用是非常糟糕的做法。然而,让制定者广泛使用副作用是很常见的,尽管这些副作用在我的例子中不那么常见!

1

程序员可能不知道条件断点的存在,并将该语句用作放置有条件触发的断点的位置。

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

0

有一些低级别的硬件情况,其中设置值具有(理想的)副作用,不能以其他方式调用。这很愚蠢,但超出了程序员的范围来修复。我仅仅在C代码中看到了这种情况,所以我确定这不是你在C#代码中看到这种情况的原因,但它确实发生了。

0

请注意,这是一个你应该评论的事情的一个了不起的(也是很常见的)例子:任何“显而易见的”“修复”实际上都会破坏事物。确保你从挫折中学习!

+0

你是否建议评论我已删除'else'块? – systempuntoout 2011-03-03 15:20:43

+1

对不起,我的意思是无论是谁写的,或者如果你发现它存在的合理原因。我的观点是,如果你做过类似的事情,请记住这一集,并让你的同事或未来的自己也得到同样的痛苦! – 2011-03-03 15:23:24