为什么两个IntelliSense和编译器都接受VB.NET中的If 3 = True Then ...
?即使Option Strict开启。
它实际上是否将布尔人视为整数,或者是什么交易?
答案 0 :(得分:3)
来自MSDN,Boolean Data Type (Visual Basic):
当Visual Basic将数值数据类型值转换为布尔值时,0变为False,所有其他值变为True。
因此,除了0之外,任何转换为布尔值的数字都会计算为True
。
答案 1 :(得分:2)
True等同于任何非零值。您应该收到与
相同的回复If -3 = True Then
答案 2 :(得分:1)
任何非零整数值=布尔值True。
可以在布尔表达式中使用整数值的比较。
答案 3 :(得分:0)
@Oded“L - 猜测,这可能是因为VB6 / VBA就是这样做的,并让开发人员习惯了这些语言在他们的快乐区。 - Oded 2天前”
实际上,我对这种情况的理解是Visual Basic 6.0和VBA在处理布尔值时与其他编程社区不一致,因为对于这两种语言,-1 = true。向“0 = true以外的任何值”的移动是为了向后兼容。
我相信对于世界上大多数人来说,重要的运算符是0 = false。除0以外的任何值都将解析为true。
虽然在很多情况下,我认为标准是0 =假,1 =真。当Microsoft开发VB.NET时,他们需要保持对Visual Basic 6.0 / VBA的-1 = true保持的向后兼容性。因此,他们选择了True =<>这样,1或-1将解析为true。这似乎比一个更复杂的条件语句更清晰,它涵盖了1或-1的两种情况。他们所获得的基本上是直接评估,检查除0以外的任何值。
如果你考虑一下,这似乎也与基本的二元概念一致。开关打开(某些值不是0)或关闭(值为零)。