2016-06-14 27 views
3

雖然在VB.NET編碼我無意中寫了這樣的東西到我的代碼;如何1 = 2 = 3然後(...)的工作

Dim a as integer = 1 
Dim b as Integer = 2 
Dim c as Integer = 3 
If a = b = c Then 
'.. some Code 
End if 

它沒有給我一個錯誤,所以它看起來像它是編程語言(或編程本身)的一部分,我不知道。

我的問題

請問這個說法的工作,什麼是不錯的例子,這段代碼的使用情況?


編輯

Dim a as Integer = 1 = 2 = 3

此行也沒有給我一個錯誤。 MsgBox(a)顯示我0


答案

可以在問題的意見中找到它。

+4

改變你的項目屬性_選項Strict = ON_和錯誤信息會告訴你真相 – Steve

+0

第一個「=」是情感,其他人是「比較」,和4 = 5給出0例如 – Gar

+0

它將以'a ==(b = c)運行:比較b&c,將布爾結果(false)賦值給 –

回答

13

是的,Option Strict Off有效(默認值),這是一個有效的表達式。在這種模式下,VB.NET的行爲(幾乎)像Javascript,Python或Ruby的精神動態語言。編譯器根據需要發出轉換以使表達式有效,並在字符串,布爾值和數值類型之間進行轉換。

該表達式被評估爲從左到右,換句話說(a = b)= c。 a = b子表達式生成布爾值,需要將其轉換爲整數以與c有效進行比較。 False產生0,True產生-1。當VB仍然基於COM自動化的時候,不是一個錯誤的btw,這是遺留問題的一部分。

最後的表達式類型是布爾再次。請注意您的第二條語句如何將其轉換爲Integer。由於具有給定值的a = b總是產生False,所以0 = c將始終爲False。

使用Option Strict On有效時,編譯器不再應用這些自動轉換並在此語句上生成錯誤。它堅持使用CInt()來轉換布爾子表達式。總是很好地發現你摸不着表情。

您可能應該考慮更改默認值,如果頻繁出現此錯誤。使用工具>選項>項目和解決方案> VB默認值>選項嚴格設置。請注意,這將是很難永遠轉回:)

相關問題