У 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)
[EDIT]
До 2008 року це було IIf
, що працювало майже однаково If
оператору, описаному вище.
Приклад:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
завжди повертає об'єкт типу Object
, тоді як If(bool, obj, obj)
дозволяє перевірити тип із суворою опцією. ( Dim var As Integer = Iif(true, 1, 2)
не буде компілюватися з опцією, суворою для того, що ви можете так само легко писати Dim var As Integer = Iif(true, new Object(), new Object())
. Ви можете писати Dim var As Integer = If(true, 1, 2)
з параметром строго на хоч, тому що він перевірить тип, що повернувся.)
iif завжди був доступний у VB, навіть у VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Це не справжній оператор як такий, а функція в просторі імен Microsoft.VisualBasic.
If () - це найближчий еквівалент, але будьте обережні непрямих конверсій, що відбуваються, якщо ви встановили "Параметр строго вимкнено"
Наприклад, якщо ви не обережні, ви можете спробувати спробувати щось на кшталт:
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?
).