Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Or versus OrElse

Tags:

vb.net

What's 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 
like image 244
OrElse Avatar asked Jul 23 '09 09:07

OrElse


2 Answers

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.

like image 145
AakashM Avatar answered Oct 21 '22 21:10

AakashM


This is the same behaviour as with C#, where everyone uses the Coditional Or (||) and the Conditional And (&&), where you also have the normal Or (|) and normal And (&). So comparing C# to VB.Net is:

| => Or

|| => OrElse

& => And

&& => AndAlso

The condifitonal boolean operators are very usefull preventing nested if constructions. But sometimes the normal boolean operators are needed to ensure hitting both code paths.

like image 20
Bert Heesbeen Avatar answered Oct 21 '22 22:10

Bert Heesbeen