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ündigungBeispiel:
[BEARBEITEN]
Vor 2008 war es das
IIf
, was fast identisch mit dem obenIf
beschriebenen Betreiber funktionierte .Beispiel:
quelle
Iif
Gibt immer ein Objekt vom Typ zurückObject
, währendIf(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önnenDim var As Integer = Iif(true, new Object(), new Object())
. Sie können jedochDim 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.
Es ist kein echter Operator als solcher, sondern eine Funktion im Microsoft.VisualBasic-Namespace.
quelle
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:
Gibt "foo" den Wert 0!
Ich denke, die '?' Das in C # äquivalente Operator würde stattdessen die Kompilierung fehlschlagen
quelle
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.Option Strict On
. Der Grund dafür ist, dassNothing
in VB.NETdefault(T)
eher C # als C # entsprichtnull
.Integer?
, bedeutet dies, dass es nullbar ist - siehe stackoverflow.com/questions/3628757/make-an-integer-nullCType(Nothing, DateTime?
) umsetzt .