If, IIf() и If()
-
09-06-2019 - |
Вопрос
Недавно я задал вопрос о 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 он неявно ничего не преобразует в целое число.