2009-03-10 28 views
12

Duplicar posibles:
Is there a conditional ternary operator in VB.NET?operador Coalesce y el operador condicional en VB.NET

Hola chicos, podemos utilizar Coalesce operador (??) y el operador ternario condicional (:) en VB.NET como en C#?

+7

Esta no es una pregunta duplicada. Esta pregunta involucra al operador nulo-coalescente. –

+2

Para convertir? al uso de VBnet If (,) con dos parámetros como se menciona [aquí] (http://stackoverflow.com/a/6792791/521554) – LosManos

Respuesta

15

creo que se puede conseguir cerca con el uso de una línea sentencia if:

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

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

* Nota: el uso de la declaración if de esa manera solo se aplica en VB.NET 2008 en adelante. –

+0

Para usar la función If() como operador de fusión, debe invocarse con solo dos parámetros, y debe usarse para tipos de referencia: 'Dim objC = If (objA, objB)' Esto establecería objC en objA a menos que objA sea Nothing, en cuyo caso objC se pondría en objB, si es Nothing o no. –

-3

Si debe ser SiInm

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

+6

No. IIf evalúa todos los parámetros ya que es una llamada normal. Ver http://dotnetslackers.com/VB_NET/re-55021_IIF_becomes_If_and_a_true_ternary_operator.aspx – LosManos

3

apenas para la referencia, se unen operador de cadena

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

Utilizando LINQ, esta es la implementación más efectiva de 'Coalesce()'. – miroxlav

+2

El problema con esto (y el de ivan a continuación) es que se evaluarán todos los parámetros. Entonces, si escribo 'Dim thingie = Coalesce (Session (" thingie "), new Thingie)' se creará un nuevo objeto Thingie cada vez (aunque se descartará si existe Thingie en la sesión) –