2012-01-31 71 views
2

下面是一些 「壞」 的代碼:「如果a <b <c Then」實際上在vb.net中做了什麼?

Module test 
    Sub Main() 
     Console.WriteLine("1<2 = " + cstr((1<2))) 
     Console.WriteLine("2<1 = " + cstr((2<1))) 
     Console.WriteLine("1<2<3 = " + cstr((1<2<3))) 
     Console.WriteLine("3<2<1 = " + cstr((3<2<1))) 
    End Sub 
End Module 

的輸出是這樣的:

1<2 = True 
2<1 = False 
1<2<3 = True 
3<2<1 = True 

1<2<3是真的,但不正確的原因。

3<2<1值爲True爲好。爲什麼?

有人可以解釋這裏發生了什麼嗎?

我知道我應該使用a<b and b<c但我想知道當你連續使用運營商發生了什麼。即,爲什麼編譯器不會哭!這是用於其他語言的語法嗎?

回答

9

它評估其左到右,所以3<2<1是一樣的(3<2)<1。由於括號中的表達式是錯誤的,因此整個事情的計算結果爲0<1這是事實。

+0

那清除了那個!謝謝。 – jon 2012-01-31 16:03:33

+0

很高興提供幫助。不要忘記接受答案。 – Phonon 2012-01-31 16:17:11

+0

延遲道歉,SO讓你等待20分鐘.... – jon 2012-01-31 16:22:57

1

這是不特定於任何語言,但a<b<c將始終爲(a<b) < c進行評估。這也適用於所有其他運營商。所以,a+b+c將永遠是(a+b) + c

3

首先,與選項嚴格,則編譯器不會哭。隨着Option Strict Off選項,這裏是發生了什麼:

  • 3 < 2 < 1從左到右進行評估,所以它相當於(3 < 2) < 1
  • 3 < 2進行評估,以False所以編譯器計算:False < 1
  • VB轉換布爾值False0,以便它可以與另一個int值比較
  • 0 < 1評估爲True
+0

如果我將Option Strict設置爲On,然後比較讓我們說三個布爾變量。我認爲,在這種情況下,編譯器不會哭。 – jitendragarg 2012-01-31 16:10:20

+0

你是對的!但比較這樣的布爾值是沒有意義的;-) – 2012-01-31 16:11:53

相關問題