如果、IIf() 和 If()
-
09-06-2019 - |
题
我最近问了一个关于 IIf VS.如果 发现VB中还有一个函数叫做 如果 它基本上做同样的事情 伊夫 但属于短路。
做这个 如果 函数的性能优于 伊夫 功能?是否 如果 声明胜过 如果 和 伊夫 功能?
解决方案
该死,我真的以为你一直在谈论接线员。;-) 反正 …
该 If 函数的性能是否比 IIf 函数更好?
确实。请记住,它已内置于语言中。只需评估两个条件参数之一,这可能会节省昂贵的操作。
If 语句是否胜过 If 和 IIf 函数?
我认为你不能比较两者,因为它们做不同的事情。如果您的代码在语义上执行分配,您应该强调这一点,而不是决策。使用 If
此处使用运算符代替语句。如果您可以在变量的初始化中使用它,则尤其如此,否则该变量将被默认初始化,从而导致代码变慢:
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,b/c 它隐式地将 Nothing 转换为 Integer。
不隶属于 StackOverflow