11

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

这个If函数是否比IIf函数执行得更好?If语句是否胜过IfIIf函数?

4

2 回答 2

14

该死,我真的以为你一直在谈论运营商。;-) 无论如何……</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
于 2008-08-26T16:10:32.827 回答
3

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。

于 2014-04-30T18:45:41.627 回答