2

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

iif (integervariable, 0, 1)

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

4

3 回答 3

6

它不是正则表达式,而是函数调用,IIf是函数。

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

于 2013-01-16T08:50:56.367 回答
4

这就是IIf功能。检查有关它的文档

通常,在这种编程语言中,0False代表True.

无论如何,“你永远不应该编写依赖于 True 和 False 的等效数值的代码。” (MSDN)在“布尔类型不能准确地转换为数字类型”中查看此处以获取更多信息。

希望这可以帮助。

于 2013-01-16T09:04:41.340 回答
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)。结果是相同的,没有潜在的不可预测的结果。

于 2013-01-16T16:36:18.333 回答