W Perlu (i innych językach) warunkowy operator trójskładnikowy można wyrazić w następujący sposób:
my $foo = $bar == $buz ? $cat : $dog;
Czy w VB.NET istnieje podobny operator?
W Perlu (i innych językach) warunkowy operator trójskładnikowy można wyrazić w następujący sposób:
my $foo = $bar == $buz ? $cat : $dog;
Czy w VB.NET istnieje podobny operator?
Odpowiedzi:
Zależy od wersji. If
Operator VB 2008 jest trójskładnikowym operatora (jak operator koalescencji zerowy). Zostało to właśnie wprowadzone, przed 2008 r. Nie było to możliwe. Oto kilka informacji: Visual Basic If Ogłoszenie
Przykład:
Dim foo as String = If(bar = buz, cat, dog)
[EDYTOWAĆ]
Przed rokiem 2008 IIf
działał on prawie identycznie jak If
operator opisany powyżej.
Przykład:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
zawsze zwraca obiekt typu Object
, a If(bool, obj, obj)
pozwala na sprawdzenie typu z opcją ścisłą. ( Dim var As Integer = Iif(true, 1, 2)
nie skompiluje się z opcją ścisłą, ponieważ równie łatwo można pisać Dim var As Integer = Iif(true, new Object(), new Object())
. Możesz jednak pisać Dim var As Integer = If(true, 1, 2)
z opcją ścisłą, ponieważ sprawdzi, czy typ został zwrócony.)
iif zawsze był dostępny w VB, nawet w VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Nie jest to prawdziwy operator, ale funkcja w przestrzeni nazw Microsoft.VisualBasic.
Jeśli () jest najbliższym odpowiednikiem, ale uważaj na niejawne konwersje trwające, jeśli ustawiłeś opcję „Wyłącz ściśle”
Na przykład, jeśli nie jesteś ostrożny, możesz ulec pokusie wypróbowania czegoś takiego:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Daje „foo” wartość 0!
Myślę że '?' odpowiednik operatora w języku C # zamiast tego zawiedzie kompilację
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. Powodem jest to, że Nothing
w VB.NET jest odpowiednikiem C # default(T)
zamiast null
.
CType(Nothing, DateTime?
).