Оператор If (Visual Basic)If Operator (Visual Basic)

Использует оценку короткого замыкания, чтобы условно вернуть одно из двух значений.Uses short-circuit evaluation to conditionally return one of two values. Оператор If может быть вызван с тремя аргументами или с двумя аргументами.The If operator can be called with three arguments or with two arguments.

СинтаксисSyntax

If( [argument1,] argument2, argument3 )

Если оператор называется с тремя аргументамиIf operator called with three arguments

Когда If называется с помощью трех аргументов, первый аргумент должен Booleanоценить значение, которое может быть брошено как .When If is called by using three arguments, the first argument must evaluate to a value that can be cast as a Boolean. Это Boolean значение будет определять, какой из двух других аргументов оценивается и возвращается.That Boolean value will determine which of the other two arguments is evaluated and returned. Следующий список применяется If только тогда, когда оператор вызывается с помощью трех аргументов.The following list applies only when the If operator is called by using three arguments.

КомпонентыParts

ТерминTerm ОпределениеDefinition
argument1 Обязательный элемент.Required. Boolean.Boolean. Определяет, какой из других аргументов следует оценить и вернуть.Determines which of the other arguments to evaluate and return.
argument2 Обязательный элемент.Required. Object.Object. Оценено и argument1 возвращено, если оценивается в True.Evaluated and returned if argument1 evaluates to True.
argument3 Обязательный элемент.Required. Object.Object. Оценено и argument1 возвращено, если False оценивается или argument1 если это nullable Boolean переменная, которая оценивает ничего.Evaluated and returned if argument1 evaluates to False or if argument1 is a NullableBoolean variable that evaluates to Nothing.

Оператор, If который называется с тремя IIf аргументами, работает как функция, за исключением того, что он использует оценку короткого замыкания.An If operator that is called with three arguments works like an IIf function except that it uses short-circuit evaluation. Функция IIf всегда оценивает все три своих аргумента, If в то время как оператор, который имеет три аргумента оценивает только два из них.An IIf function always evaluates all three of its arguments, whereas an If operator that has three arguments evaluates only two of them. Первый If аргумент оценивается и результат Boolean отбрасывается как значение, True или False.The first If argument is evaluated and the result is cast as a Boolean value, True or False. Если значение True argument2 оценивается и его значение возвращается, но argument3 не оценивается.If the value is True, argument2 is evaluated and its value is returned, but argument3 is not evaluated. Если Boolean значение выражения False argument3 оценивается и его значение возвращается, но argument2 не оценивается.If the value of the Boolean expression is False, argument3 is evaluated and its value is returned, but argument2 is not evaluated. Следующие примеры иллюстрируют использование, If когда используются три аргумента: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"))

Следующий пример иллюстрирует значение оценки короткого замыкания.The following example illustrates the value of short-circuit evaluation. В примере показаны две number попытки разделить переменную по переменной, divisor за исключением случаев, когда divisor она равна нулю.The example shows two attempts to divide variable number by variable divisor except when divisor is zero. В этом случае 0 должно быть возвращено, и не следует предусмотреть попытку выполнения разделения, поскольку в результате будет допущена ошибка времени выполнения.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. Поскольку If выражение использует оценку короткого замыкания, оно оценивает второй или третий аргумент, в зависимости от значения первого аргумента.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. Если первый аргумент верный, то делегатор не равен нулю, и можно смело оценить второй аргумент и выполнить разделение.If the first argument is true, the divisor is not zero and it is safe to evaluate the second argument and perform the division. Если первый аргумент является ложным, оценивается только третий аргумент и возвращается 0.If the first argument is false, only the third argument is evaluated and a 0 is returned. Поэтому, когда делегатор 0, не предпринимается никаких попыток выполнения разделения и никаких ошибок.Therefore, when the divisor is 0, no attempt is made to perform the division and no error results. Однако, IIf поскольку не используется оценка короткого замыкания, второй аргумент оценивается даже тогда, когда первый аргумент является ложным.However, because IIf does not use short-circuit evaluation, the second argument is evaluated even when the first argument is false. Это приводит к ошибке "разрыва за нулем" времени.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))

Если оператор вызывается с двумя аргументамиIf operator called with two arguments

Первый аргумент If может быть опущен.The first argument to If can be omitted. Это позволяет вызывать оператора, используя только два аргумента.This enables the operator to be called by using only two arguments. Следующий список применяется If только тогда, когда оператор вызывается с двумя аргументами.The following list applies only when the If operator is called with two arguments.

КомпонентыParts

ТерминTerm ОпределениеDefinition
argument2 Обязательный элемент.Required. Object.Object. Должен быть эталонный или недействительный тип значения.Must be a reference or nullable value type. Оценено и возвращено когда оно Nothingоценивает к что-нибыдь за .Evaluated and returned when it evaluates to anything other than Nothing.
argument3 Обязательный элемент.Required. Object.Object. Оценено и argument2 возвращено, если оценивается в Nothing.Evaluated and returned if argument2 evaluates to Nothing.

Когда Boolean аргумент опущен, первым аргументом должен быть тип значения ссылки или необдумируемый.When the Boolean argument is omitted, the first argument must be a reference or nullable value type. Если первый аргумент Nothingоценивается в, значение второго аргумента возвращается.If the first argument evaluates to Nothing, the value of the second argument is returned. Во всех остальных случаях значение первого аргумента возвращается.In all other cases, the value of the first argument is returned. Следующий пример иллюстрирует, как работает эта оценка: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))

См. такжеSee also