2010-06-18 47 views

回答

12

至少有三個潛在的好處:

  1. 可讀性:第一是更明顯在許多情況下比第二個例子中的語法,特別是較新的開發人員。

  2. 更好的調試經驗:如果SomeObject的構造函數拋出異常,則在第一種情況下,調試器將在該行上中斷。在第二種情況下,異常是在構造函數還是方法中並不明顯。在對象上設置斷點和檢查值也會出現同樣的問題 - 在第二種情況下這很困難,並且需要在方法內設置斷點。

  3. 在第一種情況下,您可以使用該單個調用之外的對象。如果你真的只需要一個方法進行一次調用,並且不需要對象引用,那麼靜態方法可能更合適。

+0

優秀點。謝謝! – 2010-06-18 21:11:06

2

在調試時能夠看到值(如果對象是COM互操作或類似的東西,您需要處理它,可能很重要,以便保留引用以便您能夠執行所以以受控的方式)。

如果名字很長或者有多層嵌套,它也可以更容易閱讀。

3

在大多數微不足道的情況下,編譯器無論如何都會將其刪除。值類型有一個重要點,就是將其複製到變量中以克隆值,因此可以表示重大變化 - 但不管怎樣,您都不應該鼓勵可變值類型。

浮點,也有一些邊緣的情況下,當它使用本地你會得到不同的答案(本機類型有更大的寬度大於Single/Double等等) - 這也意味着你可以得到不同的結果與調試/釋放(取決於變量是否被編譯器刪除)。

也有些情況下,變量的值可能超過堆棧中的值 - 即被「捕獲」到lambda/anon方法中,或用於out/ref,但很少適用。

0

我贊成以提高可讀性第一個選項,例如:

var phoneNumberRx = new Regex(@"^\(\d{3}\)\d{3}-\d{4}$"); 
相關問題