代码之家  ›  专栏  ›  技术社区  ›  xdumaine

在vb.net中的双赋值完成了什么?

  •  2
  • xdumaine  · 技术社区  · 16 年前

    我(对vb.net不熟悉)正在对一个函数进行一些代码维护,这个函数有时会抛出一个异常“错误,将字符串“false”(或“true”)转换为类型integer。”我发现与此类似的东西

    someval是字符串,somefun1返回整数,somefun2将整数作为参数

    ...
    someVal = someVal = someFun1()
    ...
    someFun2(someVal)
    ...
    

    我认为可能发生的是,它试图将somefun1的返回值赋给someval,然后对someval是否发生了更改执行bool检查-但我认为这不是需要做的。

    我的问题是-这个双赋值(someval=someval=somefun1())是否完成了我在vb.net中不知道的事情?

    另一个注意事项:我意识到存在从整数到字符串再到整数的隐式强制转换,但这不应该导致任何问题,因为这些值应该始终保持一个数值(可以隐式地从整数和字符串前后强制转换,对吗?)不是真是假——据我所知

    1 回复  |  直到 16 年前
        1
  •  5
  •   Tomas Aschan    16 年前

    这里的混淆是等号运算符 = 与分配运算符相同 = 在VB.NET。在c中,上述代码相当于

    someVal = someVal == someFun1();
    

    其中布尔等于运算符 == 首先执行,并将结果插入 someVal . 这失败了,因为 索马里 是 int 不是 bool .

    换句话说,运行时正在比较 索马里 返回值为 someFun1() 归来 True 或 False ,但未能将其转换为整数。这不是“双重分配”——它只是

    If someVal = someFun1() Then
        someVal = True
    Else
        someVal = False
    End If
    

    更明显的是,我们试图 Integer 变量类型的值 Boolean .