2012-05-13 30 views
7

可能重複:
What's the point of the var keyword?
What advantages does using var have over the explicit type in C#?爲什麼使用var而不是類名?

我總是看到別人產生類似的代碼:

VAR SMTP =新SmtpClient();

但是爲什麼在這種情況下使用var而不是SmtpClient?我ALWAYS使用

SmtpClient SMTP =新SmtpClient();

var更有效嗎?爲什麼使用var而不是實際的變量類型?我錯過了什麼嗎?

+1

可能的重複[使用var有什麼優勢超過顯式類型在C#?](http://stackoverflow.com/questions/3425966/what-advantages-does-using-var-have-over-the-顯式類型在C)另請參見[C#'VAR'與特定類型的性能](http://stackoverflow.com/questions/356846/c-sharp-var-vs-specific-type-performance) –

+0

@MattBall大聲笑和**這是**一個重複也 –

回答

16

想象一下。

Dictionary<Dictionary<String, String>, String> items = new Dictionary<Dictionary<String, String>, String>(); 

var對於這樣的事情很有用。

var items = new Dictionary<Dictionary<String, String>, String>(); 

簡單得多。在C++ 11中,varauto相同,編譯器知道類型,所以爲什麼我們必須重複這麼多。我個人很少使用var,但僅限於長時間聲明。這只是語法糖。

+0

我會defintalley開始更頻繁地使用 –

15

不,這不是關於效率,只是關於代碼編寫風格。

考慮到它的風格,此規則不能應用總是

想象,下面snipplet:

var myVar = Some3dPartFunction(),什麼是類型的myVar? 從代碼風格的角度來看,並不是絕對清楚,也不是很好,用這種方式來寫。

總之,選擇適當的寫作方式是一種聰明的做法。

+0

這很有道理,謝謝 –

+1

如果你不知道哪個函數返回它的名字,這是一個命名不正確的函數。 –

+1

@MatějZábský:在一個完美的世界裏,我會同意你的觀點,但是在真實的辦公室編碼我**總是**遇到不好的命名函數,變量,沒有評論的代碼,沒有經過測試的代碼..什麼。你不能設計一個框架來適應完美世界的需求。 – Tigran

1

它的語法糖:

var smtp = new SmtpClient(); 

等於:

SmtpClient smtp = new SmtpClient(); 

這是一個新的功能在C#3.0,稱爲類型推斷。

1

不,它不是更有效率。這是明確寫入類型的同樣的事情。事實上,它是好的編程寫變量的類型,而不是使用var,因爲它使代碼更具可讀性。

所以:

var smtp = new SmtpClient(); 

和:

SmtpClient smtp = new SmtpClient(); 

是同樣的事情在兩種不同的方式寫。

相關問題