Есть ли условный тернарный оператор в VB.NET?

В Perl (и других языках) условный тернарный оператор может быть выражен следующим образом:

my $foo = $bar == $buz ? $cat : $dog;

Есть ли аналогичный оператор в VB.NET?

Ответ 1

Зависит от версии. Оператор 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)

Ответ 2

iif всегда был доступен в VB, даже в VB6.

Dim foo as String = iif(bar = buz, cat, dog)

Это не истинный оператор, как таковой, а функция в пространстве имен Microsoft.VisualBasic.

Ответ 3

Если() является ближайшим эквивалентом, но остерегается неявных преобразований, если вы выбрали "Option Strict off"

Например, если вы не будете осторожны, у вас может возникнуть соблазн попробовать что-то вроде:

Dim foo As Integer? = If( someTrueExpression, Nothing, 2)

Дает "foo" значение 0!

Я думаю, что '?' оператор, эквивалентный в С#, вместо этого завершит компиляцию

Ответ 4

Вы можете использовать этот пример:

Dim MyResult As String = If(MyString = MyCondition, "trueValue", "falseValue")

Ответ 5

Если ([аргумент1,] аргумент2, аргумент3) Когда If вызывается с использованием трех аргументов, первый аргумент должен оценивать значение, которое может быть выбрано как Boolean. Это логическое значение будет определять, какой из двух других аргументов оценивается и возвращается. Следующий список применяется только тогда, когда оператор If вызывается с использованием трех аргументов.

Ответ 7

VB 2010 и выше также поддерживают это выражение:

тест? expression1: expression2

Пример:

var now = new Date(); var greeting = "Good" + ((now.getHours() > 17)? "Вечер".: "день." );

проверьте msdn документацию здесь: https://msdn.microsoft.com/en-us/library/zakwfxx4(v=vs.100).aspx

Ответ 8

Используйте эту строку,

foo=IIf(bar=buz,cat,dog)