我(VB.NET新手)正在对一个函数进行一些代码维护,这个函数有时会抛出异常“将字符串转换错误”False“(或”True“)到Integer类型。”我发现的是与此相同的东西
someVal是一个字符串,someFun1返回一个Integer,someFun2将一个Integer作为参数
...
someVal = someVal = someFun1()
...
someFun2(someVal)
...
我认为可能发生的是它试图将someFun1的返回值分配给someVal,然后执行bool检查someVal是否已更改 - 但我不认为这是需要做的事情。
我的问题是 - 这个双重赋值(someVal = someVal = someFun1())完成了我在VB.NET中不知道的任何事情吗?
另一个注意事项:我意识到有一些整数到字符串的隐式强制转换并返回整数,但这不应该导致任何问题,因为值应该始终保持一个数值(可以隐式地来回转换整数和字符串,对吧?)不是真或假 - 据我所知
答案 0 :(得分:5)
这里的混淆是,equals运算符=
与VB.NET中的赋值运算符=
相同。在C#中,上面的代码等同于
someVal = someVal == someFun1();
首先执行布尔等于运算符==
,并将结果插入someVal
。这失败了,因为someVal
是int
,而不是bool
。
换句话说,运行时正在将someVal
与someFun1()
的返回值进行比较,返回True
或False
,并且无法将其转换为整数。这不是“双重任务” - 它只是
If someVal = someFun1() Then
someVal = True
Else
someVal = False
End If
更明显的是,我们尝试为Integer
变量提供Boolean
类型的值。