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?
vb.net
operators
conditional-operator
short-circuiting
Jim się liczy
źródło
źródło
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łoszeniePrzykład:
[EDYTOWAĆ]
Przed rokiem 2008
IIf
działał on prawie identycznie jakIf
operator opisany powyżej.Przykład:
źródło
Iif
zawsze zwraca obiekt typuObject
, aIf(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.
Nie jest to prawdziwy operator, ale funkcja w przestrzeni nazw Microsoft.VisualBasic.
źródło
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:
Daje „foo” wartość 0!
Myślę że '?' odpowiednik operatora w języku C # zamiast tego zawiedzie kompilację
źródło
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.Option Strict On
. Powodem jest to, żeNothing
w VB.NET jest odpowiednikiem C #default(T)
zamiastnull
.Integer?
goCType(Nothing, DateTime?
).