359

In Perl (e altre lingue) un operatore ternario condizionale può essere espresso in questo modo:Esiste un operatore ternario condizionale in VB.NET?

my $foo = $bar == $buz ? $cat : $dog; 

Esiste un operatore simile in VB.NET?

+13

Un operatore ternario è un operatore che prende tre operandi, molto simile a un operatore binario in due e un operatore unario ne prende uno. L'operatore?: è un esempio specifico di un operatore ternay, non la definizione – Zooba

+82

Sì, grazie ma questa informazione non è di aiuto –

+20

Ecco perché è un commento, piuttosto che una risposta. Ho commentato che c'era un risposta corretta identificando IIf che sembra essere scomparso ora. – Zooba

risposta

474

Depends. L'operatore If in VB.NET 2008 funge da operatore ternario. Questo è stato appena introdotto, prima del 2008 non era disponibile. Ecco qualche informazione in più: Visual Basic If announcement

Esempio:

Dim foo as String = If(bar = buz, cat, dog) 
+11

Prima del 2008 era IIf, che funzionava in modo quasi identico all'operatore If descritto nel link. – Zooba

+104

... con l'importante differenza che Iif(), essendo una funzione, ha sempre valutato sia il conseguente sia l'alternativa, mentre il nuovo Se ne valuta solo uno. –

+6

cosa significa? Se (condizione, parte vera, parte falsa). posso rito? – kbvishnu

65

IIF è sempre stata disponibile in VB, anche in VB6.

Dim foo as String = iif(bar = buz, cat, dog) 

Non è un vero e proprio operatore, in quanto tale, ma una funzione nello spazio dei nomi Microsoft.VisualBasic.

+30

Ifif è comunque vicino ad un operatore ternario - il che significa non è possibile utilizzarlo in tutte le condizioni in cui si eseguirà un If Then Else (o operatore ternario). Ad esempio, Valore = Iif (1 = 1, 0, 1/0) esploderebbe, ma Valore = If (1 = 1, 0, 1/0) non ... –

+3

VB non supporta la valutazione del cortocircuito (eccetto per l'operatore AndAlso), quindi i programmatori VB non si aspettano davvero di poter valutare in sicurezza una mezza operazione. Ma considerato, anche iif è una funzione di hacking che è stata messa in retrocompatibilità altrimenti sarebbe un vero operatore. –

+33

Bello catalogare tutti i programmatori VB ;-) E ISNot e OrElse sono anche scorciatoie, quindi VB supporta effettivamente la valutazione del cortocircuito. – HardCode

18

Se() è l'equivalente più ma attenti di conversioni implicite in corso se è stato impostato "Option Strict off"

Ad esempio, se il tuo non attento si può essere tentati di provare qualcosa di simile:

Dim foo As Integer? = If(someTrueExpression, Nothing, 2) 

darà "pippo" un valore di 0!

Penso che il '?' operatore equivalente in C# sarebbe invece fallire la compilazione

+5

Solo per completezza, il modo migliore per scrivere quell'espressione è 'Dim foo As Integer? = If (someTrueExpression, New Integer ?, 2) '. –

+5

Si noti che questo si verifica anche con 'Option Strict On'. Il motivo è che 'Nothing' in VB.NET è equivalente a' default (T) 'di C# piuttosto che a' null'. – Heinzi

+1

E per chiunque sconcertato da 'Integer?' Significa che è annullabile - vedi http://stackoverflow.com/questions/3628757/make-an-integer-null –

-5

utilizzare questa linea,

foo=IIf(bar=buz,cat,dog) 
+2

Questo non è un operatore ternario condizionale.È una funzione che si comporta allo stesso modo in determinate circostanze –

1

Se ([argomento1,] argument2, argument3) Quando Se viene chiamato utilizzando tre argomenti, il primo argomento deve restituire un valore che può essere lanciato come booleano. Questo valore booleano determinerà quale degli altri due argomenti viene valutato e restituito. Il seguente elenco si applica solo quando l'operatore If viene chiamato utilizzando tre argomenti.

2

È possibile utilizzare questo esempio:

Dim MyResult As String = If(MyString = MyCondition, "trueValue", "falseValue") 
+1

Una risposta inutile che non aggiunge nulla alle soluzioni già stabilite, aggiunse anni tardi nella speranza di ottenere un rappresentante. –