2013-11-26 40 views
2

我注意到越來越多,我們的開發人員使用優先關鍵字var實際鑄造的類型,作爲一個例子使用var關鍵字時數據類型是已知的

var check = context.ALLProducts.Any(); 

顯然任何()只永遠要返回一個布爾值,所以就我而言,它應該被設置爲一個布爾值。我也看到了一些示例,其中var用於返回Int或字符串的函數,或者我認爲不應該是var的任意數量的類型。

所以我的問題是 - 是否有任何真正的原因,我應該有一個問題與VAR用於一切,除了代碼的可讀性和可支持性?如果可能,我想強化我的觀點,而不是說我不喜歡它。

+3

http://www.infoq.com/news/2008/05/CSharp-var – majjam

+0

謝謝,這很有趣。我意識到這是非常主觀的,我只是希望有人會回來,沒有使用VAR的一切具體原因。 – Andrew

+1

@Andrew var只是語法糖,所以不會有一個具體的原因(即不會有這樣一種情況,即與顯式類型變量相比,var'ed變量的行爲不正確)。因此,這純粹是一種風格的東西。 –

回答

1

自己張貼該代碼是完全相同的使用bool

var check = context.ALLProducts.Any(); 

你根本就無法把一個非布爾到check如果你聲明它這樣。

作爲一個例子,這個程序會給你一個編譯器錯誤;

class Program 
{ 
    public static void Main() 
    { 
     var check = true; 
     check = 1; 
    } 
} 

恆值 '1' 不能被轉換爲 '布爾'


的優點是它需要較少的打字,特別是如果你類型是

System.Namespace.ReallyReallyLongTypeName thing = SomeFactory.GetObject(); 

,當然,缺點是你不能直接瀏覽代碼並立即知道它是什麼類型。

2

不確定這是否包含在鏈接中,但使用var關鍵字的正面情況適用於需要重構模型的情況。

獲取一個實例,其中一個函數需要更改返回值類型,但新類型與上一個類型共享很多(如果不是全部)屬性。如果你使用了var,那麼你將會有很少的重構,如果有的話。

一個真實世界的例子可能是一個開發人員在存儲庫中返回dto,並且在綁定之前不會將其轉換爲視圖模型。如果您將var用於模型並將其設置爲已翻譯的視圖模型,那麼您的動作可能很少/不會重構,以針對更改後的類型進行調整。