我最近问了一个关于IIf 与 If的问题,发现 VB 中有另一个函数叫做If ,它基本上和IIf做同样的事情,但是是短路的。
这个If函数是否比IIf函数执行得更好?If语句是否胜过If和IIf函数?
我最近问了一个关于IIf 与 If的问题,发现 VB 中有另一个函数叫做If ,它基本上和IIf做同样的事情,但是是短路的。
这个If函数是否比IIf函数执行得更好?If语句是否胜过If和IIf函数?
该死,我真的以为你一直在谈论运营商。;-) 无论如何……</p>
这个 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
在某些情况下,后者将隐式地将结果转换为相同的数据类型,如 whereIIf
将返回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。