В Perl (и других языках) условный тернарный оператор может быть выражен следующим образом:
my $foo = $bar == $buz ? $cat : $dog;
Есть ли в VB.NET аналогичный оператор?
В Perl (и других языках) условный тернарный оператор может быть выражен следующим образом:
my $foo = $bar == $buz ? $cat : $dog;
Есть ли в VB.NET аналогичный оператор?
Зависит от версии. Оператор If
в VB.NET 2008 является тернарным оператором (а также оператором слияния с нулевым значением). Это было только что введено, до 2008 года это не было доступно. Вот дополнительная информация: Visual Basic If анонс
Пример:
Dim foo as String = If(bar = buz, cat, dog)
[РЕДАКТИРОВАТЬ]
До 2008 года это был IIf
, который работал почти идентично оператору If
, описанному выше.
Пример:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
всегда возвращает объект типа Object
, тогда как If(bool, obj, obj)
допускает проверку типов с помощью параметра strict on. (Dim var As Integer = Iif(true, 1, 2)
не будет компилироваться с параметром strict on, потому что вы можете так же легко написать Dim var As Integer = Iif(true, new Object(), new Object())
. Вы МОЖЕТЕ написать Dim var As Integer = If(true, 1, 2)
с параметром strict on, потому что он будет проверять возвращаемый тип.)
- person Joseph Nields; 21.04.2015
iif всегда был доступен в VB, даже в VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Это не настоящий оператор как таковой, а функция в пространстве имен Microsoft.VisualBasic.
Если () - ближайший эквивалент, но остерегайтесь неявных преобразований, происходящих, если вы отключили Option Strict
Например, если вы не будете осторожны, у вас может возникнуть соблазн попробовать что-то вроде:
Dim foo As Integer? = If(someTrueExpression, Nothing, 2)
Придаст foo значение 0!
Я думаю '?' эквивалент оператора в C # вместо этого приведет к сбою компиляции
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
- person Mark Hurd; 04.02.2015
Option Strict On
. Причина в том, что Nothing
в VB.NET эквивалентен default(T)
в C #, а не null
.
- person Heinzi; 10.12.2015
Integer?
, это означает, что он допускает значение NULL - см. stackoverflow.com/questions/3628757/make-an- целое-ноль
- person AjV Jsy; 17.06.2016
CType(Nothing, DateTime?
).
- person KyleMit; 17.01.2017
Для записи разница между If и IIf заключается в следующем:
IIf (условие, истинная часть, ложная часть):
Если (условие, истинная часть, ложная часть):