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

9.0
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.

9.0

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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow