OrElse - 8 months ago 52

Vb.net Question

Whats the difference between or and OrElse?

`if temp is dbnull.value or temp = 0`

produces the error *Operator '=' is not defined for type 'DBNull' and type 'Integer'.**

while this one works like a charm!

`if temp is dbnull.value OrElse temp = 0`

Answer

`OrElse`

is a **short-circuiting** operator, `Or`

is not.

By the definition of the boolean 'or' operator, if the first term is True then the whole is definitely true - so we don't need to evaluate the second term.

`OrElse`

knows this, so doesn't try and evaluate `temp = 0`

once it's established that `temp Is DBNull.Value`

`Or`

doesn't know this, and will always attempt to evaluate both terms. When `temp Is DBNull.Value`

, it can't be compared to zero, so it falls over.

You should use... well, whichever one makes sense.