如果,IIf()和If()

11

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

这个 If 函数是否比 IIf 函数性能更好? If 语句是否胜过 IfIIf 函数?

2个回答

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

3

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,因为它会将 Nothing 隐式转换为 Integer。


上个月在我的代码中发生了这件事,我花了一个小时进行调试才找出问题所在。这是 If() 的一个缺点。 - R.S.K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接