2009-03-10 11 views
12

Possible en double:
Is there a conditional ternary operator in VB.NET?opérateur Coalesce et l'opérateur conditionnel dans VB.NET

Salut les gars, Peut-on utiliser l'opérateur Coalesce (??) et opérateur ternaire conditionnel (:) dans VB.NET comme dans C#?

+7

Ceci n'est pas une question en double. Cette question implique l'opérateur de coalescence nulle. –

+2

Pour la conversion ?? à VBnet utiliser If (,) avec deux paramètres comme mentionné [ici] (http://stackoverflow.com/a/6792791/521554) – LosManos

Répondre

15

Je pense que vous pouvez approcher avec l'aide d'une ligne instruction if:

//C# 
int x = a ? b : c; 

'VB.Net 
Dim x as Integer = If(a, b, c) 
+3

* Remarque: l'utilisation de l'instruction if de cette manière s'applique uniquement dans VB.NET 2008 et versions ultérieures. –

+0

Pour utiliser la fonction If() en tant qu'opérateur coalesce, elle doit être appelée avec seulement deux paramètres et doit être utilisée pour les types de référence: 'Dim objC = If (objA, objB)' Ceci définirait objC à objA sauf si objA est Nothing, auquel cas objC sera mis à objB, que ce soit Nothing ou non. –

-3

Si doit être IIf

Dim x as Integer=IIf(a,b,c)

+6

Non. IIf évalue tous les paramètres car il s'agit d'un appel normal. Voir http://dotnetslackers.com/VB_NET/re-55021_IIF_becomes_If_and_a_true_ternary_operator.aspx – LosManos

3

juste pour la référence, l'opérateur Coalesce for String

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 
12
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 
+0

En utilisant LINQ, c'est l'implémentation 'Coalesce()' la plus efficace. – miroxlav

+2

Le problème avec ceci (et ivan ci-dessous), est que tous les paramètres seront évalués. Donc, si j'écris 'Dim thingie = Coalesce (Session (" thingie "), nouveau Thingie)' un nouvel objet Thingie sera créé à chaque fois (bien qu'il sera jeté si une Thingie existe dans la Session) –