You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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这类表达式拆解为两步运算:

  1. 先计算0 <= age,得到一个布尔值(在VB中,True的数值为-1,False为0)
  2. 再用第一步得到的布尔值和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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:03:17