我最近提出了一个关于 IIf vs. If 的问题,并发现在VB中还有另一个函数叫做 If,它基本上与 IIf 做相同的事情,但是是短路的。
这个 If 函数是否比 IIf 函数性能更好? If 语句是否胜过 If 和 IIf 函数?
我最近提出了一个关于 IIf vs. If 的问题,并发现在VB中还有另一个函数叫做 If,它基本上与 IIf 做相同的事情,但是是短路的。
这个 If 函数是否比 IIf 函数性能更好? If 语句是否胜过 If 和 IIf 函数?
肯定的。记住,它是内置于语言中的。只需评估两个条件参数中的一个,就可以潜在地节省昂贵的操作。这个 If 函数比 IIf 函数表现更好吗?
我认为你不能将两者进行比较,因为它们执行不同的功能。如果您的代码在语义上执行赋值操作,则应强调此操作,而不是决策制定。在这种情况下,请使用 If 运算符而不是语句。特别是如果您可以将其用于变量的初始化,否则该变量将被默认初始化,导致代码速度较慢:If 语句是否胜过 If 和 IIf 函数?
Dim result = If(a > 0, Math.Sqrt(a), -1.0)
' versus
Dim result As Double ' Redundant default initialization!
If a > 0 Then
result = Math.Sqrt(a)
Else
result = -1
End If
IIf()
和If()
之间的一个非常重要的区别是,在使用Option Infer On
时,后者在某些情况下会隐式地将结果转换为相同的数据类型,而IIf()
则会返回Object
。
示例:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
输出:
iifVal
值为 Nothing,类型为 Object
ifVal
值为 0,类型为 Integer,因为它会将 Nothing 隐式转换为 Integer。