2011-11-16 66 views
14

我注意到,在調試C#項目和VB.NET項目時,VS 2010中的直接窗口行爲有所不同,儘管我一直無法找到任何特定的文檔這種差異。C#和VB.NET中的立即窗口行爲差異

對於C#項目,我可以簡單地輸入在任何表達式,並且它將被評估和顯示,即,在

foo.bar打字== 「baz」 的

將輸出

在VB.NET,H不管怎樣,做同樣的事情什麼都不輸出。

我必須在表達式前面加上一個問號才能工作。

foo.bar = 「巴茲」

編輯的清晰度和我的壞榜樣,上面:

所有其他的表情表現出相同的行爲,包括簡單的數學這樣的作爲'1 + 2'。有時候錯誤信息是不同的,因爲1 + 2導致錯誤'數字標籤必須跟着冒號。'

有沒有辦法'修復'這種行爲,並使VB.NET立即窗口行爲更像C#之一?必須輸入一個?在每一個陳述面前經常使用它會是一件痛苦的事情。

回答

14

即時窗口的語義只是不同。在C#中,評估輸入的任何表達式或語句,並將評估結果打印到窗口中。在VB.NET中,你必須輸入一個完整的語句;你不能輸入裸露的表情。在你的例子中,如你所發現的,如果你想在窗口上打印任何東西,你需要使用「打印」語句(別名爲?)。

這樣做的一個原因是語言的語義不同。正如Bob Kaufman所提到的,=可以是一個賦值運算符或一個相等性測試。如果VB.NET窗口像C#窗口一樣工作,那麼將無法確定a = b是指「將b賦值給a」還是「評估b是否等於a」。

賦值在VB.NET中沒有值; a = b = 4表示「評估b是否等於4,並將評估結果分配給a」。這意味着意志要麼等於真或假。

在C#中,assigment也是一個具有值的表達式,所以a = b = 4的意思是「給b賦值4,並賦值給a的表達式(b = 4)」。這意味着a將等於4.

+0

謝謝,這非常合理。這仍然是一個痛苦,尤其是對於簡單的房地產評估。 –

+1

所以基本上,只要在陳述 – levininja

+0

@levininja的前面加一個'?';這個問題或多或少是「爲什麼這是必要的?」 – phoog

5

立即窗口解析器期望語句如果您不使用?命令。命令

foo.bar = "baz" 

在vb中是合法的。淨,它是一個賦值語句,給出對象foo的字段或屬性「baz」的值。但是,如果酒吧是該類的一種方法,但是會抱怨。同樣,「1 + 2」在vb.net中不是一個有效的語句,命令幫助解釋者理解你打算評估一個表達。要將賦值運算符從賦值語句轉換爲比較運算符,必​​須使解析器明白表達式正在被計算。 ?需要。對於「1 + 2」同樣的事情,vb.net語句解析器接受一個語句開頭的數字作爲語句標籤,適合GoTo。

C#語言遵循花括號語言標準,其中任何表達式也是有效的語句。所以「1 + 2」被解釋爲沒有幫助的有效聲明?這也是它需要等號運算符(==)的單獨符號的原因,解析器不會知道賦值語句和表達式之間的區別。

+0

感謝您的額外澄清! –