В 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, если объявление
Пример:
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)
допускает проверку типов со строгим параметром 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.
Dim foo as String = iif(bar = buz, cat, dog)
Это не настоящий оператор как таковой, а функция в пространстве имен Microsoft.VisualBasic.
Если () является ближайшим эквивалентом, но будьте осторожны неявных преобразований, если вы установили Option Strict off
Например, если вы не осторожны, вы можете попробовать что-то вроде:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Даст "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-null
CType(Nothing, DateTime?
).