Поделиться через


Оператор If

Обновлен: Ноябрь 2007

Использует сокращенные вычисления, в зависимости от результата которых возвращает одно из двух значений. Оператор If может быть вызван с тремя или с двумя аргументами.

If( [argument1,] argument2, argument3 )

Оператор If с тремя аргументами

При вызове If с тремя аргументами первый аргумент должен иметь значение, которое может быть приведено к Boolean. Значение Boolean определит, какой из двух других аргументов будет вычислен и возвращен. Следующий список относится только к вызову оператора If с тремя аргументами.

Компоненты

  • argument1
    Обязателен. Boolean. . Определяет, какой из других аргументов будет вычислен и возвращен.

  • argument2
    Обязателен. Object. Вычисляется и возвращается, если argument1 принимает значение True.

  • argument3
    Обязателен. Object. Вычисляется и возвращается, если argument1 принимает значение False.

Оператор 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 runtime 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 можно опустить. Это позволяет вызвать оператор с использованием только двух аргументов. Следующий список относится только к вызову оператора If с двумя аргументами.

Компоненты

  • argument2
    Обязателен. Object. Должен быть ссылкой или типом nullable. Вычисляется и возвращается, если вычисленное значение отлично от Nothing.

  • argument3
    Обязателен. Object. Вычисляется и возвращается, если argument2 принимает значение Nothing.

Если аргумент Boolean опущен, то первый аргумент должен быть ссылкой или типом nullable. Если первый аргумент имеет значение 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))

См. также

Основные понятия

Типы значения Null

Ссылки

Nothing (Visual Basic)

Функция IIf