В Perl (и других языках) условный троичный оператор можно выразить так:
my $foo = $bar == $buz ? $cat : $dog;
Есть ли подобный оператор в VB.NET?
vb.net
operators
conditional-operator
short-circuiting
Джим считает
источник
источник
Ответы:
Зависит от версии.
If
Оператор в VB.NET 2008 является трехкомпонентным оператором (а также оператор сращивания нуля). Это было только введено, до 2008 это не было доступно. Вот еще немного информации: Visual Basic, если объявлениеПример:
[РЕДАКТИРОВАТЬ]
До 2008 года это было
IIf
, которое работало почти идентичноIf
оператору, описанному выше.Пример:
источник
Iif
всегда возвращает объект типаObject
, тогда какIf(bool, obj, obj)
допускает проверку типов со строгим параметром 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, потому что она проверит возвращаемый тип.)iif всегда был доступен в VB, даже в VB6.
Это не настоящий оператор как таковой, а функция в пространстве имен Microsoft.VisualBasic.
источник
Если () является ближайшим эквивалентом, но будьте осторожны неявных преобразований, если вы установили Option Strict off
Например, если вы не осторожны, вы можете попробовать что-то вроде:
Даст "foo" значение 0!
Я думаю '?' операторный эквивалент в C # вместо сбоя компиляции
источник
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.Option Strict On
. Причина в том, чтоNothing
в VB.NET эквивалентно C #,default(T)
а неnull
.Integer?
это означает , что это обнуляемый - см stackoverflow.com/questions/3628757/make-an-integer-nullCType(Nothing, DateTime?
).