Недавно я узнал о функции IIF (A, B, C). Я долгое время VB/VB.NET Coder, который недавно потратил много времени на ускорение в SQL-кодировании.
Одна (очевидная) общая вещь, которую нужно делать в SQL, выглядит примерно так:
select (case where @var = 0 then MyTable.Val1 else MyTable.Val2 end) from MyTable
IIF (A, B, C) позволит мне сделать это в VB.NET... все на одной строке.
Однако я прочитал, что оба B и C оцениваются независимо от того, что оценивает A.
Я могу думать о некоторых очевидных ситуациях, когда это плохо, например:
Dim X as integer = IIF(SomeBoolean = true, ExpensiveFunction1(), ExpensiveFunction2())
Как я буду включать это в свой репертуар, есть ли еще более тонкие ситуации, когда я могу попасть в проблему с использованием IIF?
Это довольно большой отход в некоторых ситуациях от использования старомодного:
Dim X as integer
if SomeBoolean = true then
X = ExpensiveFunction1()
else
X = ExpensiveFunction2()
end if
Я надеюсь сохранить некоторые неприятные проблемы с производительностью и/или ошибки в будущем.
Обновление 2016
В течение последних нескольких лет существует новая функция VB.NET, которая исключает необходимость использования функции IIF().
if(Something = true, ExecuteA(), ExecuteB())
Выполняются только ExecuteA() или ExecuteB(). Наконец, встроенный IF с короткой циркуляцией.
Итак, если вы используете более поздние версии VB.NET(начиная с 2016 года), используйте это, если можете.