这是VB 6中某些属性的正则表达式:iif(integervariable,0,1)?

时间:2013-01-16 08:47:56

标签: vb.net vb6 integer iif

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

iif (integervariable, 0, 1)

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

3 个答案:

答案 0 :(得分:6)

这不是一个正则表达式,它是一个函数调用,IIf是函数。

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

答案 1 :(得分:4)

这是IIf功能。检查一下this documentation

通常,在这种编程语言中,0表示False以及True的任何其他内容。

在任何情况下,“你永远不应该编写依赖于True和False的等效数值的代码。” (MSDN) 检查“布尔类型不能准确转换为数字类型”中的here以获取更多信息。

希望这有帮助。

答案 2 :(得分:1)

GSerg和SysDragon有一些很好的答案。 我只想添加一件未提及的内容:

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

IIf (integervariable, 0, 1)

If (integervariable) Then ...

True的逻辑比较是隐含的。所以

IIf (integervariable, 0, 1)

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

If (integervariable) Then ...

相同
If (CBool(integervariable) = True) Then ...

请注意:正如SysDragon所提到的,你绝不应该依赖将数值与布尔值进行比较的代码。这就是原因:

Print IIF(CInt("123"), True, False)True

Print IIF(CBool("True"), True, False)也是True

因此,当比较它们时,人们会假设结果为True。但实际上,

Print IIF(CInt("123") = CBool("True"), True, False)出现为False

这个例子的道德是,如果integervariable是一个整数(或任何其他不是布尔值的数据类型),那么最佳做法是进行逻辑比较。在您的情况下,而不是IIf (integervariable, 0, 1)使用IIf (integervariable <> 0, 0, 1)。结果是相同的,没有潜在的不可预测的结果。