【问题标题】:boolean VB expression returning false for integer 1布尔 VB 表达式为整数 1 返回 false
【发布时间】:2011-01-17 19:34:59
【问题描述】:

这可能是一个非常基本(没有双关语)的问题,但我似乎无法在任何地方找到答案。为什么func1的结果返回False而func2返回True?在我所做的所有其他测试中,整数 1 被转换为布尔值 true,0 被转换为 false。如果我将 rtnValue 设置为 1 或 0,则可以正常工作。

Public Function func1() As Boolean
    Dim rtnValue As Integer = 0
    Return rtnValue = 1

End Function


Public Function func2() As Boolean
    Dim rtnValue As Integer = 0
    Return rtnValue = 0

End Function

【问题讨论】:

  • = 运算符既可以在赋值语句中使用,也可以在表达式中用作相等运算符。您正在获取表达式版本。 1 = 0 为假。

标签: vb.net


【解决方案1】:

相信你在"Return rtnValue = 1"中所做的其实是比较rtnValue是否等于1,而不是设置rtnValue为1然后返回rtnValue。

【讨论】:

    【解决方案2】:

    您正在危险地混淆类型。在 VB 中,整数 1 是整数 1,而不是布尔值 true。整数 0 和布尔值 false 也是如此。

    此外,您的 func1() 正在检查 rtnValue 是否等于 1。如果是,则您的函数返回 true。如果不是,则返回 false。在您的情况下,您将 rtnValue 设置为 0,并且由于 0 不等于 1,因此它返回 false。

    您的 func2() 返回 true,因为 rtnValue 等于 0,这是您正在测试的内容。

    【讨论】:

    • 这种“类型混合”的发生,我相信,多亏了 C。对于 C 编程语言,任何 eval 为零的都是假的,任何 eval 非零的都是真的。
    【解决方案3】:

    您正在重新调整表达式检查,它会出现。因此,当Return rtnValue = 0 时,它将报告为true,因为rtnValue 确实是0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多