2009-03-10 19 views

risposta

15

Penso che si possa avvicinarsi con l'utilizzo di un inline if:

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

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

* Nota: l'uso dell'istruzione if vale solo per VB.NET 2008 e successivi. –

+0

Per utilizzare la funzione If() come operatore di coalesce, deve essere richiamato con due soli parametri e deve essere utilizzato per i tipi di riferimento: 'Dim objC = If (objA, objB)' Ciò imposterà objC su objA a meno che objA non sia nulla, nel qual caso objC verrebbe impostato su objB, che sia Nothing o no. –

-3

Se dovrebbe essere IIf

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

+6

No. IIf valuta tutti i parametri poiché è una chiamata normale. Vedi http://dotnetslackers.com/VB_NET/re-55021_IIF_becomes_If_and_a_true_ternary_operator.aspx – LosManos

3

appena per riferimento, Coalesce operatore 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

Utilizzando LINQ, questa è l'implementazione 'Coalesce()' più efficace in circolazione. – miroxlav

+2

Il problema con questo (e ivan di seguito), è che tutti i parametri saranno valutati. Quindi, se scrivo 'Dim thingie = Coalesce (Session (" thingie "), nuovo Thingie)' un nuovo oggetto Thingie verrà creato ogni volta (anche se verrà gettato via se un Thingie esiste nella Session) –