VB.Net是否不支持x <= age < y式连续比较?整数比较异常求助
VB.Net 是否不支持连续区间比较?
我编写了如下VB.Net代码:
Module Module1 Sub Main() Dim name As String Dim age As Integer Dim range As String Console.WriteLine("What's your name?") name = Console.ReadLine() Console.WriteLine($"Hello, {name}, how old are you?") age = Console.ReadLine() If 0 <= age < 1 Then range = " child." ElseIf 1 <= age < 2 Then range = " toddler." ElseIf 2 <= age < 12 Then range = " child." ElseIf 12 <= age < 19 Then range = " teenager." ElseIf 19 <= age < 64 Then range = "n adult." Else range = " pensioner." End If Console.WriteLine($"Hello, {name}, you are a{range}") Console.ReadKey() End Sub End Module
当输入年龄为10时,range仍被赋值为" child.",但10并不在0<=age<1的区间内。将x <= age < y改为age >= x And age < y后,代码就能正常工作。请问Visual Basic是否不支持此类连续比较?我知道Python是支持这种写法的。
解答
VB.Net不支持x <= age < y这种连续比较语法,这和Python的行为完全不同。
原因是VB会把0 <= age < 1这类表达式拆解为两步运算:
- 先计算
0 <= age,得到一个布尔值(在VB中,True的数值为-1,False为0) - 再用第一步得到的布尔值和
1比较,即(0 <= age) < 1
以输入年龄10为例:
0 <= 10结果为True(对应数值-1)- 接着判断
-1 < 1,结果也是True,因此第一个If条件会被触发,导致错误赋值。
正确的写法必须用And(或AndAlso,短路求值更高效)连接两个独立的比较表达式,修正后的条件示例:
If age >= 0 AndAlso age < 1 Then range = " child." ElseIf age >= 1 AndAlso age < 2 Then range = " toddler." ' 其余条件同理修改
内容的提问来源于stack exchange,提问作者Jackson Yang
相关产品推荐
相关产品推荐

