if、IIf() 和 if()

If, IIf() and If()

提问人:Bryan Roth 提问时间:8/27/2008 最后编辑:CommunityBryan Roth 更新时间:5/1/2014 访问量:4537

问:

我最近问了一个关于 IIf 与 If 的问题,发现 VB 中还有另一个函数叫做 If,它基本上与 IIf 做同样的事情,但是一个短路。

If 函数的性能是否优于 IIf 函数?If 语句是否胜过 IfIIf 函数?

.NET vb.net 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 OnIIfObject

例:

    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 转换为整数。
iifValifVal

评论

0赞 RSK 12/9/2020
上个月发生在我的代码中,我花了一个小时进行调试以解决这个问题。这是 If() 的一个缺点