Если, IIf () и If () - PullRequest
       58

Если, IIf () и If ()

10 голосов
/ 26 августа 2008

Я недавно задал вопрос о IIf против If и обнаружил, что в VB есть еще одна функция с именем If , которая в основном делает то же самое, что и IIf * 1006. * но это короткое замыкание.

Работает ли эта , если функция работает лучше, чем функция IIf ? Превосходит ли оператор If функции If и IIf ?

Ответы [ 2 ]

14 голосов
/ 26 августа 2008

Черт, я действительно думал, что вы все время говорили об операторе. ;-) В любом случае…

Работает ли эта функция лучше, чем функция 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
1 голос
/ 30 апреля 2014

Одно очень важное различие между 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 и тип объекта
ifVal имеет значение 0 и тип Integer, т.к. он неявно преобразует Nothing в Integer.

...