Visual Basic .NET Language
condizioni
Ricerca…
If ... Then ... Else
Dim count As Integer = 0
Dim message As String
If count = 0 Then
message = "There are no items."
ElseIf count = 1 Then
message = "There is 1 item."
Else
message = "There are " & count & " items."
End If
Se l'operatore
If(condition > value, "True", "False")
Possiamo usare l'operatore If invece di If ... Then ... Else..End Se blocchi di istruzioni.
Considera il seguente esempio:
If 10 > 9 Then
MsgBox("True")
Else
MsgBox("False")
End If
equivale a
MsgBox(If(10 > 9, "True", "False"))
If()
usa la valutazione di cortocircuito , il che significa che valuterà solo gli argomenti che usa. Se la condizione è falsa (o un Nullable
che non è Nothing
), la prima alternativa non verrà valutata affatto e nessuno dei suoi effetti collaterali sarà osservato. Questo è effettivamente lo stesso dell'operatore ternario di C # sotto forma di condition?a:b
.
Questo è particolarmente utile per evitare eccezioni:
Dim z As Integer = If(x = 0, 0, y/x)
Sappiamo tutti che dividendo per zero si genera un'eccezione, ma If()
qui si difende da questo, cortocircuitando solo l'espressione che la condizione ha già assicurato è valida.
Un altro esempio:
Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)
Se varString <> "N/A"
varDate
False
, assegnerà il valore di Now.Date
come Now.Date
senza valutare la prima espressione.
Le versioni precedenti di VB non hanno l'operatore If()
e devono IIf()
della funzione integrata IIf()
. Come è una funzione, non un operatore, non è così corto circuito; vengono valutate tutte le espressioni, con tutti i possibili effetti collaterali, tra cui penalizzazioni delle prestazioni, modifica dello stato e eccezioni di lancio. (Entrambi i precedenti esempi che evitano eccezioni verrebbero lanciati se convertiti in IIf
.) Se uno qualsiasi di questi effetti collaterali presenta un problema, non c'è modo di usare un condizionale in linea; invece, If..Then
affidamento su If..Then
blocca come al solito.