Mögliche Duplizieren:
Is there a conditional ternary operator in VB.NET?Coalesce Operator und Conditional Operator in VB.NET
Hallo Jungs, Können wir Coalesce Operator (??) und bedingte ternäre Operator (:) in VB.NET wie in C#?
Mögliche Duplizieren:
Is there a conditional ternary operator in VB.NET?Coalesce Operator und Conditional Operator in VB.NET
Hallo Jungs, Können wir Coalesce Operator (??) und bedingte ternäre Operator (:) in VB.NET wie in C#?
Ich denke, man kann mit der Verwendung eines Inline-nahe kommen if-Anweisung:
//C#
int x = a ? b : c;
'VB.Net
Dim x as Integer = If(a, b, c)
* Hinweis: Mit der if-Anweisung funktioniert das nur in VB.NET 2008 und höher. –
Um die Funktion If() als Koaleszenzoperator zu verwenden, muss sie mit nur zwei Parametern aufgerufen werden und für Referenztypen verwendet werden: 'Dim objC = If (objA, objB)' Dies würde objC auf objA setzen es sei denn objA ist Nothing, in diesem Fall würde objC auf objB gesetzt werden, ob es Nothing ist oder nicht. –
Wenn sollten IIf sein
Dim x as Integer=IIf(a,b,c)
Nein. IIf wertet alle Parameter aus, da es sich um einen normalen Anruf handelt. Siehe http://dotnetslackers.com/VB_NET/re-55021_IIF_becomes_If_and_a_true_ternary_operator.aspx – LosManos
nur als Referenz, Coalesce Operator für Streich
Private Function Coalesce(ByVal ParamArray Parameters As String()) As String
For Each Parameter As String In Parameters
If Not Parameter Is Nothing Then
Return Parameter
End If
Next
Return Nothing
End Function
Sub Main()
Dim x, z As Object
Dim y As Nullable(Of Integer)
z = "1243"
Dim c As Object = Coalesce(x, y, z)
End Sub
Private Function Coalesce(ByVal ParamArray x As Object())
Return x.First(Function(y) Not IsNothing(y))
End Function
Mit LINQ ist dies die effektivste 'Coalesce()' Implementierung um. – miroxlav
Das Problem damit (und ivan's unten) ist, dass alle Parameter ausgewertet werden. Also, wenn ich 'Dim thingie = Coalesce (Session (" dingie "), neues Thingie) schreibe, wird jedes Mal ein neues Thingie-Objekt erstellt (obwohl es weggeworfen wird, wenn ein Thingie in der Session existiert) –
Dies ist keine doppelte Frage. Diese Frage betrifft den Nullkoaleszenzoperator. –
Zum Umwandeln ?? zu VBnet verwende If (,) mit zwei Parametern wie erwähnt [hier] (http://stackoverflow.com/a/6792791/521554) – LosManos