3

IIf使用over有性能优势If吗?

除了更少的代码......有什么区别:

If msInitialFloodSection <> Trim$(cboFloodSection.Text) Then
    mbFloodSectionChanged = True
Else
    mbFloodSectionChanged = False
End If

mbFloodSectionChanged = IIf(msInitialFloodSection <> Trim$(cboFloodSection.Text), True, False)
4

1 回答 1

14

IIf不是运算符或语言结构,它是一个函数,就像任何其他函数一样,例如Left. 因此,它将始终评估其所有参数,而If您只会评估正确的分支。

例子:

denominator = 0
value = IIf(denominator = 0, 0, value / denominator)

Divizion by zero尽管分母为零,但存在单独的分支,这将引发错误。

关于性能,它将您的值打包到 Variants 中,这将需要额外的滴答声,根本没有那么多,但如果我们在性能方面,那么If会更快,因为它不会通过 Variants 强制执行操作,因为它会只计算其中一个值,而不是两个。

于 2012-10-24T13:56:48.300 回答