Vb.net 这是VB6:iif(整数变量,0,1)中某些属性的正则表达式吗?

Vb.net 这是VB6:iif(整数变量,0,1)中某些属性的正则表达式吗?,vb.net,vb6,integer,iif,Vb.net,Vb6,Integer,Iif,这是VB 6中某些属性的正则表达式: iif (integervariable, 0, 1) 如果是,我想知道iif如何在没有任何逻辑比较的情况下解析整型参数?它不是正则表达式,而是函数调用,函数为iif 在VB中,可以在布尔上下文中使用整数变量。在这种情况下,0转换为False,非零转换为True,这就是IIf函数。查一查 通常,在这种编程语言中,0表示False,其他任何值表示True 在任何情况下,“您都不应该编写依赖于等效数字值的True和False的代码。”(MSDN) 有关详细信息

这是VB 6中某些属性的正则表达式:

iif (integervariable, 0, 1)

如果是,我想知道iif如何在没有任何逻辑比较的情况下解析整型参数?

它不是正则表达式,而是函数调用,函数为
iif


在VB中,可以在布尔上下文中使用整数变量。在这种情况下,
0
转换为
False
,非零转换为
True

,这就是
IIf
函数。查一查

通常,在这种编程语言中,0表示
False
,其他任何值表示
True


在任何情况下,“您都不应该编写依赖于等效数字值的True和False的代码。”(MSDN) 有关详细信息,请签入“布尔类型不能准确转换为数字类型”


希望这能有所帮助。

GSerg和SysDragon有一些好的答案。 我只想补充一件没有提到的事情:

当你有IIF或IF时,没有逻辑比较,例如

IIf (integervariable, 0, 1)

隐含了与
True
的逻辑比较。所以

IIf (integervariable, 0, 1)

IIf (CBool(integervariable) = True, 0, 1)

If (CBool(integervariable) = True) Then ...
请注意:正如SysDragon提到的,您永远不应该依赖于将数值与布尔值进行比较的代码。这就是为什么:

Print IIF(CInt(“123”),True,False)
True

Print IIF(CBool(“True”)、True、False)
也是
True

因此,当比较两者时,人们会假设结果是正确的。但事实上,

Print IIF(CInt(“123”)=CBool(“真”),真,假)
显示为
False


这个例子的寓意是,如果
integervariable
是一个整数(或任何其他不是布尔值的数据类型),那么最好进行逻辑比较。在您的情况下,使用
IIf(整数变量0,0,1)
代替
IIf(整数变量0,0,1)
。结果相同,没有潜在的不可预测结果。

搜索
正则表达式
,然后搜索
msdn iif vb6
。+1。顺便说一句,我编辑了你的链接,指向IIf上的英文VB6文档。你原来的链接是西班牙VB.Net文档:)@MarkJ谢谢。有时我的大脑没有意识到他在读什么语言P“您永远不应该编写依赖于等效数值表示真和假的代码。”来自MSDN,对吗?我不同意,因为逐位运算的计算结果是一个数值,即
Dim I作为整数
I=4和6'4
如果I then foo()else bar()
我的示例相当于一个常见的逐位掩码运算,即
如果(4和6)那么foo()else bar()
数值布尔值应该被解开。程序员需要理解@SysDragon指出的关于0=False和其他任何=True的内容。
If (integervariable) Then ...
If (CBool(integervariable) = True) Then ...