2012-09-25 24 views

回答

1

使用隱式類型並不意味着變量不是強類型的。這意味着編譯器意味着語句右側的類型。

var i = 1; 

i是定義爲具有類型int。這與說int i = 1;完全一樣,但類型是隱含的。

同樣,下面的代碼是一個更容易閱讀:

var pairs = new List<pair<int, IEnumerable<string>>>(); 

比,如果你不得不鍵入:

List<pair<int, IEnumerable<string>>> pairs = new List<pair<int, IEnumerable<string>>>(); 

,但結果是完全一樣的。

+0

謝謝,這意味着,由於類型在comile時間被解析,所以任何錯誤的變量(例如將它傳遞給其他類型的函數)都會被編譯器檢測到。 – Thomas

+0

這是絕對正確的。編譯器知道它是什麼類型,你知道它是什麼類型。使用'隱式'類型只是一個捷徑。 –

7

好建議有:

Coding Convention - Implicitly Typed Local Variables

使用局部變量隱式類型時,變量 的類型是從的右側明顯或者當精確的 類型是不重要

它並不總是如此。

此外,它具有:

當類型不是從 轉讓的右側明顯不要使用變種。來自同一來源

例子:

// When the type of a variable is not clear from the context, use an 
// explicit type. 
int var4 = ExampleClass.ResultSoFar(); 
4

這是一個語法糖是減少了擊鍵。

編譯器通過評估RHS上的表達式來推導出LHS上的變量類型。

所以象下面這樣的代碼:

var fStream = new FileStream("file", Filemode.Open); 

是由編譯器transalted到:

Filestream fstream = new FileStream("file", Filemode.Open); 

編譯器就是這麼樣做了一些我們的打字。

0

使用var不會損害您的性能,因爲編譯器會完成所有工作。 輸入時間短於MyDatabaseModel model

另一個使用var的原因是你可以在右側看到它是什麼類型的。

使用它的最後一個原因是匿名類型(只要你不知道類型)。

2

我的經驗法則:

您應該使用var代碼是否意味着是通用;即,如果將來類型改變,它可能正常工作。

相關問題