为什么A< = B< = C在Visual Basic中不起作用?

时间:2015-10-08 13:39:59

标签: vb.net

所以我的同事今天生我的气,因为我在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

1 个答案:

答案 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