提问人:Bryan Roth 提问时间:8/27/2008 最后编辑:CommunityBryan Roth 更新时间:5/1/2014 访问量:4537
if、IIf() 和 if()
If, IIf() and If()
问:
我最近问了一个关于 IIf 与 If 的问题,发现 VB 中还有另一个函数叫做 If,它基本上与 IIf 做同样的事情,但是一个短路。
此 If 函数的性能是否优于 IIf 函数?If 语句是否胜过 If 和 IIf 函数?
答:
14赞
Konrad Rudolph
8/27/2008
#1
该死的,我真的以为你一直在谈论操作员。;-)无论如何。。。
此 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
3赞
BateTech
5/1/2014
#2
和之间一个非常重要的区别是,在某些情况下,后者将隐式地将结果转换为相同的数据类型,因为 where 将返回 。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)
输出:
值为 Nothing,Object
类型值为 0,类型为 Integer,b/c 它隐式地将 Nothing 转换为整数。iifVal
ifVal
评论
0赞
RSK
12/9/2020
上个月发生在我的代码中,我花了一个小时进行调试以解决这个问题。这是 If() 的一个缺点
评论