Eventuali duplicati:
Is there a conditional ternary operator in VB.NET?Coalesce e l'operatore condizionale in VB.NET
Ciao ragazzi, possiamo usare Coalesce operatore (??) e operatore ternario condizionale (:) in VB.NET come in C#?
Eventuali duplicati:
Is there a conditional ternary operator in VB.NET?Coalesce e l'operatore condizionale in VB.NET
Ciao ragazzi, possiamo usare Coalesce operatore (??) e operatore ternario condizionale (:) in VB.NET come in C#?
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)
* Nota: l'uso dell'istruzione if vale solo per VB.NET 2008 e successivi. –
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. –
Se dovrebbe essere IIf
Dim x as Integer=IIf(a,b,c)
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
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
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
Utilizzando LINQ, questa è l'implementazione 'Coalesce()' più efficace in circolazione. – miroxlav
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) –
Questa non è una domanda doppia. Questa domanda riguarda l'operatore a coalescenza nulla. –
Per la conversione ?? a VBnet usa If (,) con due parametri come menzionato [qui] (http://stackoverflow.com/a/6792791/521554) – LosManos