Вопрос

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

Делает ли это Если функция работает лучше, чем IIf функция?Делает ли Если заявление трампа о Если и IIf функции?

Это было полезно?

Решение

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

Работает ли эта функция 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() это с Option Infer On более поздний вариант будет неявно приводить результаты к тому же типу данных в определенных случаях, что и where 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, b / c он неявно ничего не преобразует в целое число.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top