+5  A: 

Sure: if you want to make sure that both sides of the expression are evaluated. This might be the case if, for example, both sides are method calls that return booleans as a result of some other operation.

But in general, you should AndAlso/OrElse whenever you would use &&/|| in C/C++/C#, which of course is the vast majority of the time.

Joel Coehoorn
A: 

You should probably read up on short circuit evaluation.

Geoffrey Chetwood
I think he just, or he wouldn't be asking the question.
Joel Coehoorn
That is fine, but I think the article I linked will help him understand the concept more.
Geoffrey Chetwood
+11  A: 

From MSDN:

Short-Circuiting Trade-Offs

Short-circuiting can improve performance by not evaluating an expression that cannot alter the result of the logical operation. However, if that expression performs additional actions, short-circuiting skips those actions. For example, if the expression includes a call to a Function procedure, that procedure is not called if the expression is short-circuited, and any additional code contained in the Function does not run. If your program logic depends on any of that additional code, you should probably avoid short-circuiting operators.

Vaibhav
One could argue that relying on your logic code to run a function is obscure and your logic should be designed to not rely on that for clarity and maintainability.
Andrew Burns
I agree. The real lesson here is don't write code that doesn't clearly indicate it's side effects!
Bob King
A: 

I'd also add that you may want to use And/Or instead of the short-circuit version when the evaluations are potentially time-consuming.

Say, for example, that your both elements in your evaluation retrieve something from a database, which is an expensive operation. Using the short-circuit operators while cause these evaluations to be performed in series, not parallel, causing a longer-than-necessary delay in your application.

Admittedly, these long-running lookups shouldn't be part of an evaluation statement, but it's a situation where the standard logic operators are more appropriate.

rwmnau
I've never seen any parallel execution happen like this. Wouldn't this imply that the compiler would start parallel threads? Is this a new feature?
Eric Tuttleman