.net If,IIf()和If()

.net If,IIf()和If(),.net,vb.net,if-statement,iif-function,.net,Vb.net,If Statement,Iif Function,我最近问了一个关于的问题,发现VB中有另一个函数叫做If,它的功能基本上与IIf相同,但它是一个短路 该If功能是否比IIf功能性能更好?If语句是否胜过If和IIf函数?该死,我真的以为你一直在谈论操作员。;-)无论如何 这个If函数是否比IIf函数性能更好 当然。记住,它是语言中固有的。只需计算两个条件参数中的一个,这可能会节省昂贵的操作 If语句是否优于If和IIf函数 我想你不能比较这两个,因为他们做的事情不同。若您的代码在语义上执行赋值,您应该强调这一点,而不是决策。在此处使用If运算

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


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

该死,我真的以为你一直在谈论操作员。;-)无论如何

这个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()
之间一个非常重要的区别是,使用
选项“推断开”
,后者将在某些情况下隐式将结果转换为相同的数据类型,因为
IIf
将返回
对象

例如:

    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,对象类型为

ifVal
的值为0,类型为整数,b/c它隐式地将零转换为整数。

上个月在我的代码中发生过,我花了一个小时调试来解决这个问题。这是If()的一个缺点