Operatore If (Visual Basic)If Operator (Visual Basic)

Utilizzi di corto circuito di valutazione per restituire in modo condizionale uno dei due valori.Uses short-circuit evaluation to conditionally return one of two values. Il If operatore può essere chiamato con tre argomenti o con due argomenti.The If operator can be called with three arguments or with two arguments.

SintassiSyntax

If( [argument1,] argument2, argument3 )  

Se viene chiamato operatore con tre argomentiIf Operator Called with Three Arguments

Quando If viene chiamato con tre argomenti, il primo argomento deve restituire un valore che è possibile eseguire il cast come un Boolean.When If is called by using three arguments, the first argument must evaluate to a value that can be cast as a Boolean. Che Boolean valore determina quale dei due argomenti viene valutata e restituita.That Boolean value will determine which of the other two arguments is evaluated and returned. Nell'elenco seguente si applica solo quando il If operatore viene chiamato con tre argomenti.The following list applies only when the If operator is called by using three arguments.

PartiParts

TermineTerm DefinizioneDefinition
argument1 Obbligatorio.Required. Boolean.Boolean. Determina gli altri argomenti per valutare e restituire.Determines which of the other arguments to evaluate and return.
argument2 Obbligatorio.Required. Object.Object. Valutata e restituita se argument1 restituisca True.Evaluated and returned if argument1 evaluates to True.
argument3 Obbligatorio.Required. Object.Object. Valutata e restituita se argument1 restituisca False o se argument1 è un Nullable Boolean variabile che restituisca Nothing.Evaluated and returned if argument1 evaluates to False or if argument1 is a NullableBoolean variable that evaluates to Nothing.

Un' If operatore che viene chiamato con tre argomenti funziona come un IIf funzioni ad eccezione del fatto che usi valutazione di corto circuito.An If operator that is called with three arguments works like an IIf function except that it uses short-circuit evaluation. Un' IIf funzione valuta sempre tutti e tre argomenti, mentre un If operatore con tre argomenti viene valutata solo due di essi.An IIf function always evaluates all three of its arguments, whereas an If operator that has three arguments evaluates only two of them. Il primo If viene valutato l'argomento e il risultato viene eseguito il cast come un Boolean , valore True o False.The first If argument is evaluated and the result is cast as a Boolean value, True or False. Se il valore è True, argument2 viene valutata e il relativo valore viene restituito, ma argument3 non viene valutato.If the value is True, argument2 is evaluated and its value is returned, but argument3 is not evaluated. Se il valore della Boolean espressione è False, argument3 viene valutata e il relativo valore viene restituito, ma argument2 non viene valutato.If the value of the Boolean expression is False, argument3 is evaluated and its value is returned, but argument2 is not evaluated. Gli esempi seguenti illustrano l'uso di If quando vengono usati tre argomenti:The following examples illustrate the use of If when three arguments are used:

' This statement prints TruePart, because the first argument is true.
Console.WriteLine(If(True, "TruePart", "FalsePart"))

' This statement prints FalsePart, because the first argument is false.
Console.WriteLine(If(False, "TruePart", "FalsePart"))

Dim number = 3
' With number set to 3, this statement prints Positive.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))

number = -1
' With number set to -1, this statement prints Negative.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))

L'esempio seguente illustra il valore di valutazione di corto circuito.The following example illustrates the value of short-circuit evaluation. L'esempio mostra due tentativi di dividere una variabile number dalla variabile divisor eccetto quando divisor è uguale a zero.The example shows two attempts to divide variable number by variable divisor except when divisor is zero. In tal caso, deve essere restituito un valore 0 e debba eseguito alcun tentativo di eseguire la divisione perché provocherebbe un errore di run-time.In that case, a 0 should be returned, and no attempt should be made to perform the division because a run-time error would result. Poiché il If utilizzo delle espressioni di valutazione di corto circuito, valuta il secondo o il terzo argomento, a seconda del valore del primo argomento.Because the If expression uses short-circuit evaluation, it evaluates either the second or the third argument, depending on the value of the first argument. Se il primo argomento è true, il divisore è diverso da zero ed è opportuno valutare il secondo argomento ed eseguire la divisione.If the first argument is true, the divisor is not zero and it is safe to evaluate the second argument and perform the division. Se il primo argomento è false, solo il terzo argomento viene valutato e viene restituito 0.If the first argument is false, only the third argument is evaluated and a 0 is returned. Pertanto, quando il divisore è 0, viene eseguito alcun tentativo di eseguire la divisione e non verranno generati errori.Therefore, when the divisor is 0, no attempt is made to perform the division and no error results. Tuttavia, poiché IIf non usa la valutazione di corto circuito, il secondo argomento è valutato anche quando il primo argomento è false.However, because IIf does not use short-circuit evaluation, the second argument is evaluated even when the first argument is false. Ciò causa un errore di divisione per zero in fase di esecuzione.This causes a run-time divide-by-zero error.

number = 12

' When the divisor is not 0, both If and IIf return 4.
Dim divisor = 3
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))

' When the divisor is 0, IIf causes a run-time error, but If does not.
divisor = 0
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
' Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))

Se viene chiamato operatore con due argomentiIf Operator Called with Two Arguments

Il primo argomento If può essere omesso.The first argument to If can be omitted. In questo modo l'operatore di chiamata usando solo due argomenti.This enables the operator to be called by using only two arguments. Nell'elenco seguente si applica solo quando il If operatore viene chiamato con due argomenti.The following list applies only when the If operator is called with two arguments.

PartiParts

TermineTerm DefinizioneDefinition
argument2 Obbligatorio.Required. Object.Object. Deve essere un riferimento o nullable.Must be a reference or nullable type. Valutata e restituita quando restituisce un valore qualsiasi diverso da Nothing.Evaluated and returned when it evaluates to anything other than Nothing.
argument3 Obbligatorio.Required. Object.Object. Valutata e restituita se argument2 restituisca Nothing.Evaluated and returned if argument2 evaluates to Nothing.

Quando il Boolean viene omesso, il primo argomento deve essere un riferimento o nullable.When the Boolean argument is omitted, the first argument must be a reference or nullable type. Se il primo argomento restituisce Nothing, viene restituito il valore del secondo argomento.If the first argument evaluates to Nothing, the value of the second argument is returned. In tutti gli altri casi, viene restituito il valore del primo argomento.In all other cases, the value of the first argument is returned. L'esempio seguente illustra il funzionamento di questa versione di valutazione.The following example illustrates how this evaluation works.

' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6

' Variable first <> Nothing, so its value, 3, is returned.
Console.WriteLine(If(first, second))

second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))

first = Nothing
second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))

Vedere ancheSee also