2016-06-14 65 views
3

虽然在VB.NET编码我无意中写了这样的东西到我的代码;如何1 = 2 = 3然后(...)的工作

Dim a as integer = 1 
Dim b as Integer = 2 
Dim c as Integer = 3 
If a = b = c Then 
'.. some Code 
End if 

它没有给我一个错误,所以它看起来像它是编程语言(或编程本身)的一部分,我不知道。

我的问题

请问这个说法的工作,什么是不错的例子,这段代码的使用情况?


编辑

Dim a as Integer = 1 = 2 = 3

此行也没有给我一个错误。 MsgBox(a)显示我0


答案

可以在问题的意见中找到它。

+4

改变你的项目属性_选项Strict = ON_和错误信息会告诉你真相 – Steve

+0

第一个“=”是情感,其他人是“比较”,和4 = 5给出0例如 – Gar

+0

它将以'a ==(b = c)运行:比较b&c,将布尔结果(false)赋值给 –

回答

13

是的,Option Strict Off有效(默认值),这是一个有效的表达式。在这种模式下,VB.NET的行为(几乎)像Javascript,Python或Ruby的精神动态语言。编译器根据需要发出转换以使表达式有效,并在字符串,布尔值和数值类型之间进行转换。

该表达式被评估为从左到右,换句话说(a = b)= c。 a = b子表达式生成布尔值,需要将其转换为整数以与c有效进行比较。 False产生0,True产生-1。当VB仍然基于COM自动化的时候,不是一个错误的btw,这是遗留问题的一部分。

最后的表达式类型是布尔再次。请注意您的第二条语句如何将其转换为Integer。由于具有给定值的a = b总是产生False,所以0 = c将始终为False。

使用Option Strict On有效时,编译器不再应用这些自动转换并在此语句上生成错误。它坚持使用CInt()来转换布尔子表达式。总是很好地发现你摸不着表情。

您可能应该考虑更改默认值,如果频繁出现此错误。使用工具>选项>项目和解决方案> VB默认值>选项严格设置。请注意,这将是很难永远转回:)