2011-03-03 117 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

相關問題