2015-10-08 51 views
0

所以我的同事今天生氣了,因爲我在VB.NET中使用了雙重不等式。爲什麼它不工作?基本上,值blnConditionMet總是返回true。即使dr.Item(「值」)是和499爲什麼A <= B <= C在Visual Basic中不起作用?

 For Each dr As DataRow In dtTable.Rows 

      If (400 <= dr.Item("Value") AndAlso dr.Item("Value") <= 499) Then 

       blnConditionMet = True 
       Exit For 

      End If 

     Next 
+0

你能詳細說明你想檢查你的if語句嗎? – Max

+5

titel表明你寫了類似於'400 <= dr.Item(「Value」)<= 499'的東西,但我沒有看到你的問題在任何地方回來。事實上,你的問題是什麼? – MicroVirus

+2

不是'dr.Item(「Value」)'返回對象嗎? – Magnus

回答

2

之間沒有400這裏有一個整潔的方式,看看發生了什麼:

Option Strict On在文件的最開始你的工作上。

您將看到編譯器錯誤彈出Option Strict On disallows conversions from Boolean to Integer

換句話說,當你寫a <= b <= c,編譯器讀它作爲兩個整數比較。相反,它將其讀取爲(a <= b) <= c

條件(a <= b)的計算結果爲布爾值(除非Option Strict處於打開狀態!)將自動並隱式轉換爲0-1。然後0 <= 499-1 <= 499評估爲True,這就是爲什麼Then塊總是執行。

這就是爲什麼你的同事生氣並將條件修復爲a <= b AndAlso b <= c

也就是爲什麼Option Strict On應該在每個VB.Net程序中激活的十億個原因之一。 (您可以在項目屬性中將其切換,因此您不必在每個文件的開頭都添加該行)。

編輯:更正:VB.Net中的True實際上由於歷史原因計算結果爲-1

相關問題