什么“如果< b< c Then”实际上在vb.net中做了什么?

时间:2012-01-31 15:59:45

标签: vb.net syntax operators

这是一些“坏”代码:

Module test
    Sub Main()
        Console.WriteLine("1<2 =   " + cstr((1<2)))
        Console.WriteLine("2<1 =   " + cstr((2<1)))
        Console.WriteLine("1<2<3 = " + cstr((1<2<3)))
        Console.WriteLine("3<2<1 = " + cstr((3<2<1)))
    End Sub
End Module

这个输出是:

1<2 =   True
2<1 =   False
1<2<3 = True
3<2<1 = True

1<2<3是正确的,但不是出于正确的原因。

3<2<1也评估为True。为什么呢?

有人可以解释这里发生了什么吗?

我知道我应该使用a<b and b<c,但我想知道使用连续运算符时会发生什么。即,为什么编译器不哭!像这样的语法用于别的吗?

3 个答案:

答案 0 :(得分:9)

它从左到右进行评估,因此3<2<1(3<2)<1相同。因为括号中的表达式为false,所以整个事物的计算结果为0<1,这是真的。

答案 1 :(得分:3)

首先,使用Option Strict On,编译器确实会哭。使用Option Strict Off,会发生以下情况:

  • 3 < 2 < 1从左到右进行评估,因此相当于(3 < 2) < 1
  • 3 < 2被评估为False,因此编译器评估:False < 1
  • VB将布尔值False转换为0,以便可以将其与另一个int值进行比较
  • 0 < 1评估为True

答案 2 :(得分:1)

它并非特定于任何语言,但a<b<c将始终评估为(a<b) < c。这适用于所有其他运营商。因此,a+b+c始终为(a+b) + c