2010-10-27 118 views
11

可能重複:
Use of var keyword in C#VAR VS顯式聲明

嗨, 剛搬進的工作,我已經習慣使用var很多。 在我以前的工作中,我們做了很多TDD並使用了resharper。

在他們討厭的第三方工具和開發者在這裏這份工作,不能不說是不好用var所有的時間,這是不是顯式類型的效率。

前段時間我以爲一樣,但現在我已經習慣了它,它使我的代碼看起來更整潔。

我已閱讀了一些帖子,似乎有困惑,無論它是否有效。 我讀過使用var產生相同的IL代碼。那麼它不應該如此高效?即使使用var產生相同的IL代碼,我也可以在其他地方看到它必須找出它的類型。 那麼「推斷」究竟是什麼意思呢?

一些關於性能是否相同的說法會是太棒了。

+0

「在此工作,他們恨的第三方工具」,我曾經是其中的一個,對於理智的緣故,做更重要我的時間和使代碼管理變得更簡單/更清潔和一致的事情不能使用Resharper或任何第三方工具,這些工具都會帶來優勢。只是憎恨使用某些東西不是阻止其他人使用它的理由。 – Arjang 2016-11-30 22:07:30

回答

32

就執行時間效率而言,沒有區別。它的確編譯成,確切的說是相同的IL。該變量仍然是靜態類型的,只是從初始化表達式推斷出該類型。

「推斷」是指「根據其他信息制定」。所以,如果聲明:

string x = "hello"; 

變量x明確聲明爲string型。編譯器不需要處理任何東西。如果使用var

var x = "hello"; 

然後編譯器發現被分配表達式的編譯時類型,並且使得該變量的類型。 x仍然是代碼中其他任何地方的字符串變量。

如果您正在使用的開發人員認爲var的行爲是動態的,我會對他們告訴您的其他信息非常謹慎。你可能要謹慎地建議他們在判斷它們之前多學習一些新的語言特徵。

根據開發人員效率,這是一個更難判斷的問題。我個人使用var有點 - 特別是在測試中 - 但並不是無處不在。

+0

非常感謝非常詳細的答案。真的很感謝它。我不使用任何地方,但只是使生活更容易,正如你指出沒有差異性能明智那麼爲什麼不是。再次感謝您的時間 – user9969 2010-10-27 06:43:10

+0

所以說是正確的說使用顯式類型變量vs使用var有一個非常小的_compilation_性能好處? (有意義的是運行時性能將是相同的。) – paz 2013-07-19 15:33:32

+0

@Edgar:我不想說關於編譯性能的好處。如果它們完全存在,我懷疑它們是否可以用合理的代碼衡量,而且我不想預測沒有任何證據的情況下哪種方式的好處。 – 2013-07-19 15:35:40

6

varcompilation期間轉換爲精確類型。根據我的知識,效率沒有問題。

IL該代碼如下所示:

class Foo 
    { 
     void Bar() 
     { 
      var iCount = 0; 
      int iCoount1 = 0; 
     } 
    } 

alt text