可能重複:
Advantage of var keyword in C# 3.0爲什麼在可能的情況下應該使用隱式類型(var)?
昨天我偶然發現從MS一個recomendation,我應該使用無功,當過可能:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
我總是認爲使用正確的類型將有助於記錄代碼並幫助查找b在編譯時。
這個推薦背後的原因是什麼?
最佳 托馬斯
可能重複:
Advantage of var keyword in C# 3.0爲什麼在可能的情況下應該使用隱式類型(var)?
昨天我偶然發現從MS一個recomendation,我應該使用無功,當過可能:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
我總是認爲使用正確的類型將有助於記錄代碼並幫助查找b在編譯時。
這個推薦背後的原因是什麼?
最佳 托馬斯
使用隱式類型並不意味着變量不是強類型的。這意味着編譯器意味着語句右側的類型。
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>>>();
,但結果是完全一樣的。
好建議有:
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();
這是一個語法糖是減少了擊鍵。
編譯器通過評估RHS上的表達式來推導出LHS上的變量類型。
所以象下面這樣的代碼:
var fStream = new FileStream("file", Filemode.Open);
是由編譯器transalted到:
Filestream fstream = new FileStream("file", Filemode.Open);
編譯器就是這麼樣做了一些我們的打字。
使用var不會損害您的性能,因爲編譯器會完成所有工作。 輸入時間短於MyDatabaseModel model
。
另一個使用var的原因是你可以在右側看到它是什麼類型的。
使用它的最後一個原因是匿名類型(只要你不知道類型)。
我的經驗法則:
您應該使用var
代碼是否意味着是通用;即,如果將來類型改變,它可能正常工作。
謝謝,這意味着,由於類型在comile時間被解析,所以任何錯誤的變量(例如將它傳遞給其他類型的函數)都會被編譯器檢測到。 – Thomas
這是絕對正確的。編譯器知道它是什麼類型,你知道它是什麼類型。使用'隱式'類型只是一個捷徑。 –