什么是VB.NET任务中的双重赋值完成?

时间:2010-07-16 13:21:38

标签: vb.net-2010

我(VB.NET新手)正在对一个函数进行一些代码维护,这个函数有时会抛出异常“将字符串转换错误”False“(或”True“)到Integer类型。”我发现的是与此相同的东西

someVal是一个字符串,someFun1返回一个Integer,someFun2将一个Integer作为参数

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

我认为可能发生的是它试图将someFun1的返回值分配给someVal,然后执行bool检查someVal是否已更改 - 但我不认为这是需要做的事情。

我的问题是 - 这个双重赋值(someVal = someVal = someFun1())完成了我在VB.NET中不知道的任何事情吗?

另一个注意事项:我意识到有一些整数到字符串的隐式强制转换并返回整数,但这不应该导致任何问题,因为值应该始终保持一个数值(可以隐式地来回转换整数和字符串,对吧?)不是真或假 - 据​​我所知

1 个答案:

答案 0 :(得分:5)

这里的混淆是,equals运算符=与VB.NET中的赋值运算符=相同。在C#中,上面的代码等同于

someVal = someVal == someFun1();

首先执行布尔等于运算符==,并将结果插入someVal。这失败了,因为someValint,而不是bool

换句话说,运行时正在将someValsomeFun1()的返回值进行比较,返回TrueFalse,并且无法将其转换为整数。这不是“双重任务” - 它只是

的内联表示
If someVal = someFun1() Then
    someVal = True
Else
    someVal = False
End If

更明显的是,我们尝试为Integer变量提供Boolean类型的值。