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. IfOperator 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 IIfdziałał on prawie identycznie jak Ifoperator opisany powyżej.
Przykład:
Dim foo as String = IIf(bar = buz, cat, dog)
Iifzawsze 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 Nothingw VB.NET jest odpowiednikiem C # default(T)zamiast null.
CType(Nothing, DateTime?).