我最近问了一个关于IIf vs. If的问题,并发现VB中还有另一个函数叫做 If ,它与 IIf 基本相同,但是短路。
如果功能的效果是否优于 IIf 功能? If 语句是否胜过 If 和 IIf 函数?
答案 0 :(得分:14)
该死的,我真的以为你一直都在谈论这个运营商。 ;-)无论如何...
这个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
答案 1 :(得分:1)
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。