В 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.
If() е най-близкият еквивалент, но внимавайте за косвени преобразувания, които се извършват, ако сте изключили 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?
, това означава, че може да бъде нулев - вижте stackoverflow.com/questions/3628757/make-an- integer-null
- person AjV Jsy; 17.06.2016
CType(Nothing, DateTime?
).
- person KyleMit; 17.01.2017
Само за протокола, ето разликата между If и IIf:
IIf(условие, истинска част, невярна част):
Ако(условие, истинска част, невярна част):