Se, IIf() e Se()
-
09-06-2019 - |
Domanda
Recentemente ho posto una domanda su IIf vs.Se e ho scoperto che esiste un'altra funzione in VB chiamata Se che fondamentalmente fa la stessa cosa di Se ma è un cortocircuito.
Fa questo Se la funzione funziona meglio di quella Se funzione?Il Se l'affermazione prevale su Se E Se funzioni?
Soluzione
Accidenti, pensavo davvero che stessi parlando dell'operatore fin dall'inizio.;-) Comunque …
Questa funzione If funziona meglio della funzione IIf?
Decisamente.Ricorda, è integrato nella lingua.È necessario valutare solo uno dei due argomenti condizionali, risparmiando potenzialmente un'operazione costosa.
L'istruzione If prevale sulle funzioni If e IIf?
Penso che non si possano paragonare i due perché fanno cose diverse.Se il tuo codice esegue semanticamente un compito, dovresti enfatizzare questo, invece del processo decisionale.Usa il If
operatore qui invece dell'istruzione.Ciò è particolarmente vero se puoi usarlo nell'inizializzazione di una variabile perché altrimenti la variabile verrà inizializzata per impostazione predefinita, risultando in un codice più lento:
Dim result = If(a > 0, Math.Sqrt(a), -1.0)
' versus
Dim result As Double ' Redundant default initialization!
If a > 0 Then
result = Math.Sqrt(a)
Else
result = -1
End If
Altri suggerimenti
Una distinzione molto importante tra IIf()
E If()
è quello con Option Infer On
quest'ultimo trasmetterà implicitamente i risultati allo stesso tipo di dati in alcuni casi, come where IIf
sarà di ritorno Object
.
Esempio:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
Produzione:
iifVal
ha valore Niente e tipo Oggetto
ifVal
ha valore 0 e tipo Integer, b/c sta implicitamente convertendo Nothing in un Integer.