Оператор If (Visual Basic)
Использует оценку короткого канала для условного возврата одного из двух значений. Оператор If
можно вызывать с тремя аргументами или двумя аргументами.
Синтаксис
If( [argument1,] argument2, argument3 )
Если оператор вызывается с тремя аргументами
При If
вызове с помощью трех аргументов первый аргумент должен оценить значение, которое может быть приведение в качестве Boolean
значения. Это Boolean
значение определяет, какие из других двух аргументов вычисляются и возвращаются. Следующий список применяется только в том случае, если If
оператор вызывается с помощью трех аргументов.
Детали
Термин | Определение |
---|---|
argument1 |
Обязательный. Boolean . Определяет, какие из других аргументов следует оценивать и возвращать. |
argument2 |
Обязательный. Object . Вычисляется и возвращается, если argument1 вычисляется True значение . |
argument3 |
Обязательный. Object . Вычисляется и возвращается, если argument1 вычисляется False или argument1 является ли переменная, допускающаяBoolean значение NULL, которая оценивается как Nothing. |
Оператор If
, который вызывается с тремя аргументами, работает как IIf
функция, за исключением того, что она использует оценку короткого канала. Функция IIf
всегда вычисляет все три его аргумента, в то время как If
оператор с тремя аргументами оценивает только два из них. Первый If
аргумент вычисляется, и результат приведение в качестве Boolean
значения True
или False
. Если значение равно True
, argument2
вычисляется и возвращается его значение, но argument3
не вычисляется. Если значение Boolean
выражения равно False
, argument3
вычисляется и возвращается его значение, но argument2
не вычисляется. В следующих примерах показано использование If
трех аргументов:
' 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"))
В следующем примере показано значение оценки короткого канала. В примере показаны две попытки разделить переменную по переменной number
divisor
, за исключением случаев, когда divisor
равно нулю. В этом случае должно быть возвращено значение 0, и попытка выполнить разделение не должна быть выполнена, так как ошибка во время выполнения приведет к возникновению ошибки во время выполнения. If
Так как выражение использует оценку короткого канала, оно вычисляет второй или третий аргумент в зависимости от значения первого аргумента. Если первый аргумент имеет значение true, делитель не равен нулю, и он безопасно оценить второй аргумент и выполнить деление. Если первый аргумент имеет значение false, вычисляется только третий аргумент и возвращается значение 0. Таким образом, если разделитель равен 0, попытка выполнить деление не выполняется и результатов ошибок не выполняется. Однако, так как IIf
не используется оценка короткого канала, второй аргумент вычисляется даже при значении false первого аргумента. Это приводит к ошибке деления времени выполнения на нуль.
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
можно опустить. Это позволяет вызывать оператор с помощью только двух аргументов. Следующий список применяется только при If
вызове оператора с двумя аргументами.
Детали
Термин | Определение |
---|---|
argument2 |
Обязательный. Object . Должен быть ссылочным или пустым типом значения. Вычисляется и возвращается, когда он оценивает что-либо другое, кроме Nothing . |
argument3 |
Обязательный. Object . Вычисляется и возвращается, если argument2 вычисляется Nothing значение . |
Boolean
Если аргумент опущен, первый аргумент должен быть ссылочным или пустым типом значения. Если первый аргумент оценивается Nothing
, возвращается значение второго аргумента. Во всех остальных случаях возвращается значение первого аргумента. В следующем примере показано, как работает эта оценка:
' 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))