- argument1
必ず指定します。Boolean. 他の引数のどちらを評価して返すかを決定します。
- argument2
必ず指定します。Object. argument1 が True と評価される場合、この引数を評価して返します。
- argument3
必ず指定します。argument1 が False と評価される場合、この引数を評価して返します。
3 つの引数で呼び出される If 演算子は IIf 関数と同じように機能しますが、ショートサーキット評価を使用する点が異なります。IIf 関数は常に 3 つの引数すべてを評価しますが、3 つの引数の If 演算子が評価する引数は 2 つのみです。1 番目の If 引数が評価され、結果が Boolean 値つまり True または False としてキャストされます。値が True の場合、argument2 は評価されて値が返されますが、argument3 は評価されません。Boolean 式の値が False の場合は、argument3 が評価されて値が返され、argument2 は評価されません。3 つの引数で 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"))
次の例では、ショートサーキット評価の値を示します。この例では、divisor がゼロでない場合は、変数 number を変数 divisor で 2 回割ります。ゼロの場合は、ランタイム エラーになるので、0 を返し、除算は行いません。If 式はショートサーキット評価を使用するので、1 番目の引数の値に基づいて、2 番目または 3 番目の引数を評価します。1 番目の引数が true の場合は、序数はゼロではなく、2 番目の引数を評価して除算を実行しても安全です。1 番目の引数が false の場合は、3 番目の引数のみが評価され、0 が返されます。したがって、序数が 0 の場合は、除算は実行されず、エラーは発生しません。一方、IIf はショートサーキット評価を使用しないので、1 番目の引数が false であっても、2 番目の引数が評価されます。このため、ゼロによる除算のランタイム エラーが発生します。
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))