Luk*_*uke 3 vb.net if-statement
在VB.NET中进行编码时,我意外地在我的代码中写了这样的东西;
Dim a as integer = 1
Dim b as Integer = 2
Dim c as Integer = 3
If a = b = c Then
'.. some Code
End if
Run Code Online (Sandbox Code Playgroud)
它没有给我一个错误,所以看起来它是我不知道的编程语言(或编程本身)的一部分.
我的问题:
这个语句如何工作以及这个代码用例的好例子是什么?
编辑:
Dim a as Integer = 1 = 2 = 3
这条线也没有给我一个错误.MsgBox(a)告诉我一个0
答案:
您可以在问题评论中找到它.
Han*_*ant 13
是,Option Strict Off有效(默认值)是有效表达式.在那种模式下,VB.NET(几乎)就像Javascript,Python或Ruby一样的动态语言.编译器会根据需要发出转换,以使表达式有效,可以在字符串,布尔值和数字类型之间轻松转换.
表达式从左到右评估,换句话说(a = b)= c.a = b子表达式生成布尔值,需要将其转换为整数以使其与c有效进行比较.False产生0,True产生-1.这不是一个拼写错误,这是VB仍然在很大程度上基于COM自动化的遗产的一部分.
最终的表达式类型再次为布尔值.请注意您的第二个语句如何要求转换为Integer.由于具有给定值的a = b总是产生False,因此0 = c将始终为False.
使用Option Strict On时,编译器不再应用这些自动转换并在此语句上生成错误.它坚持使用CInt()来转换布尔子表达式.总是很好,发现你弄乱了表达.
您可能应该考虑更改默认值,如果经常发生这样的错误.使用工具>选项>项目和解决方案> VB默认值>选项严格设置.请注意,很难切换回来:)