# Conditions
# If operator
If(condition > value, "True", "False")
We can use the If operator instead of If...Then...Else..End If statement blocks.
Consider the following example:
If 10 > 9 Then
MsgBox("True")
Else
MsgBox("False")
End If
is the same as
MsgBox(If(10 > 9, "True", "False"))
If()
uses short-circuit evaluation, which means that it will only evaluate the arguments it uses. If the condition is false (or a Nullable
that is Nothing
), the first alternative will not be evaluated at all, and none of its side effects will be observed. This is effectively the same as C#'s ternary operator in the form of condition?a:b
.
This is especially useful in avoiding exceptions:
Dim z As Integer = If(x = 0, 0, y/x)
We all know that dividing by zero will throw an exception, but If()
here guards against this by short-circuiting to only the expression that the condition has already ensured is valid.
Another example:
Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)
If varString <> "N/A"
evaluates to False
, it will assign varDate
's value as Now.Date
without evaluating the first expression.
Older versions of VB do not have the If()
operator and have to make do with the IIf()
built-in function. As it's a function, not an operator, it does not short-circuit; all expressions are evaluated, with all possible side-effects, including performance penalties, changing state, and throwing exceptions. (Both of the above examples that avoid exceptions would throw if converted to IIf
.) If any of these side effects present a problem, there's no way to use an inline conditional; instead, rely on If..Then
blocks as usual.
# IF...Then...Else
Dim count As Integer = 0
Dim message As String
If count = 0 Then
message = "There are no items."
ElseIf count = 1 Then
message = "There is 1 item."
Else
message = "There are " & count & " items."
End If