所以我的同事今天生我的气,因为我在VB.NET中使用了双重不等式。为什么它不起作用?基本上,值blnConditionMet总是返回true。即使dr.Item(“Value”)不在400和499之间。
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 :(得分:2)
这是一个很好的方式来看看发生了什么:
在您正在处理的文件的最开头写下Option Strict On
。
您将看到编译器错误弹出Option Strict On disallows conversions from Boolean to Integer
。
换句话说,当您编写a <= b <= c
时,编译器会将 NOT 读取为两个整数比较。相反,它将其读作(a <= b) <= c
。
条件(a <= b)
计算为一个布尔值(除非Option Strict打开!)将自动并隐式转换为0
或-1
。然后,0 <= 499
或-1 <= 499
评估为True
,这就是Then
块始终执行的原因。
这就是为什么你的同事生气并将条件修改为a <= b AndAlso b <= c
的原因。
也就是说,在每个VB.Net程序中应该激活Option Strict On
的十亿个原因之一。 (您可以在项目属性中切换它,这样就不必在每个文件的开头添加该行。)
编辑:更正:VB.Net中的True
实际上由于历史原因而评估为-1
。