In Perl (und anderen Sprachen) kann ein bedingter ternärer Operator folgendermaßen ausgedrückt werden:
my $foo = $bar == $buz ? $cat : $dog;
Gibt es einen ähnlichen Operator in VB.NET?
In Perl (und anderen Sprachen) kann ein bedingter ternärer Operator folgendermaßen ausgedrückt werden:
my $foo = $bar == $buz ? $cat : $dog;
Gibt es einen ähnlichen Operator in VB.NET?
Antworten:
Hängt von der Version ab. Der If
Operator in VB.NET 2008 ist ein ternärer Operator (sowie ein Null-Koaleszenz-Operator). Dies wurde gerade eingeführt, vor 2008 war dies nicht verfügbar. Hier einige weitere Informationen: Visual Basic If-Ankündigung
Beispiel:
Dim foo as String = If(bar = buz, cat, dog)
[BEARBEITEN]
Vor 2008 war es das IIf
, was fast identisch mit dem oben If
beschriebenen Betreiber funktionierte .
Beispiel:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
Gibt immer ein Objekt vom Typ zurück Object
, während If(bool, obj, obj)
die Typprüfung mit der Option strict on möglich ist. ( Dim var As Integer = Iif(true, 1, 2)
Kompiliert nicht mit Option strict on, da Sie genauso einfach schreiben können Dim var As Integer = Iif(true, new Object(), new Object())
. Sie können jedoch Dim var As Integer = If(true, 1, 2)
mit option strict on schreiben , da der zurückgegebene Typ überprüft wird.)
iif war schon immer in VB verfügbar, auch in VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Es ist kein echter Operator als solcher, sondern eine Funktion im Microsoft.VisualBasic-Namespace.
Wenn () das nächste Äquivalent ist, achten Sie jedoch auf implizite Konvertierungen, wenn Sie "Option Strict off" aktiviert haben.
Wenn Sie beispielsweise nicht aufpassen, könnten Sie versucht sein, Folgendes zu versuchen:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Gibt "foo" den Wert 0!
Ich denke, die '?' Das in C # äquivalente Operator würde stattdessen die Kompilierung fehlschlagen
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. Der Grund dafür ist, dass Nothing
in VB.NET default(T)
eher C # als C # entspricht null
.
Integer?
, bedeutet dies, dass es nullbar ist - siehe stackoverflow.com/questions/3628757/make-an-integer-null
CType(Nothing, DateTime?
) umsetzt .