2015-08-19 79 views
1

說我有下面的代碼聲明的變量的隱式類型:C#發現使用var關鍵字

var longValue = 2147483650; // Three more than the max int size 
var intValue = 10; 
var variableOfUnknownType = longValue - intValue; 

我想知道variableOfUnkownType是什麼類型。 (即是variableOfUnknownType.GetType() == System.Int64variableOfUnkownType.GetType() == System.Int32?)

當然,我可以去仔細閱讀類型轉換C#文檔中的算術或添加Console.WriteLine(variableOfUnknownType.GetType());聲明,我的代碼來了解這個問題的答案。但是,按照C#'s var documentation

var關鍵字指示編譯器從初始化語句右側的表達式推斷變量的類型。

這意味着MS Visual Studio應該能夠在編譯代碼之前告訴我變量的類型。

我的問題是: 如何使用MS Visual Studio告訴我這個特定的var變量的值?

+4

只需將鼠標懸停在「無功」的關鍵字,它會告訴你什麼類型推斷 –

+0

這是正確的。我的直覺是把鼠標懸停在變量名稱上,而不是產生預期的結果。 –

+0

@JacobHorbulyk是什麼表現,以及它是如何與你提到的其他選項衝突? – Servy

回答

5

只需將鼠標懸停在「無功」的關鍵字,它會告訴你推斷什麼類型

+0

謝謝soo – amin

1

TL;博士;答 將鼠標懸停在「VAR」,你看到的類型(提示它的Int64 /長)

龍答: 只是把你的代碼,並與VAR代表,你會得到下面的代碼類型替換:

uint longValue = 2147483650; // Three more than the max int size 
int intValue = 10; 
long variableOfUnknownType = longValue - intValue; 

正如你所看到的,那些是三種不同的類型,但爲什麼? uint是有道理的。沒有必要佔用64位,如果你可以用32位做同樣的事情,並且由於這是一個正數,我們可以使用無符號整數。 的int是自解釋的,然而,長是有點在第一混淆。

我們作爲程序員知道int.MaxValue + 3 - 10再次適合int,但編譯器不知道。畢竟,他怎麼知道intVariable是10?簡單:他沒有。因此他推斷他知道可以處理價值的類型。因爲我們在這裏減去,就可能導致負值,所以他需要有符號的類型,可以適應值,這是的Int64 /長

順便說一句:這是我的頭了。我不得不再次檢查c#中的整數運算來完全驗證這一點。