If 运算符 (Visual Basic)
使用短路计算根据条件返回两个值之一。 可以使用三个参数或两个参数调用 If
运算符。
语法
If( [argument1,] argument2, argument3 )
使用三个参数调用的 If 运算符
使用三个参数调用 If
时,第一个参数必须计算为可转换为 Boolean
的值。 该 Boolean
值将决定计算和返回另外两个参数中的哪一个。 以下列表仅在使用三个参数调用 If
运算符时适用。
组成部分
术语 | 定义 |
---|---|
argument1 |
必需。 Boolean 。 决定计算和返回其他参数中的哪一个。 |
argument2 |
必需。 Object 。 如果 argument1 计算为 True ,则计算并返回。 |
argument3 |
必需。 Object 。 如果 argument1 计算为 False 或 argument1 为计算为无的可为 nullBoolean 变量,则计算并返回。 |
使用三个参数进行调用的 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
表达式使用短路计算,它计算第二个或第三个参数,具体取决于第一个参数的值。 如果第一个参数为 ture,则除数不为零,计算第二个参数并执行除法。 如果第一个参数为 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
的第一个参数。 这样,可以仅使用两个参数来调用该运算符。 以下列表仅在使用两个参数调用 If
运算符时适用。
组成部分
术语 | 定义 |
---|---|
argument2 |
必需。 Object 。 必须是引用或可为 null 的值类型。 如果计算为 Nothing 以外的任意值,计算并返回。 |
argument3 |
必需。 Object 。 如果 argument2 计算为 Nothing ,则计算并返回。 |
省略 Boolean
参数时,第一个参数必须是引用或可为 null 的值类型。 如果第一个参数计算为 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))