## Why is this an issue?

Short-circuit evaluation is an evaluation strategy for Boolean operators, that doesn’t evaluate the second argument of the operator if it is not needed to determine the result of the operation.

VB.NET provides logical operators that implement short-circuiting evaluations `AndAlso` and `OrElse`, as well as the non-short-circuiting versions `And` and `Or`. Unlike short-circuiting operators, the non-short-circuiting operators evaluate both operands and afterward perform the logical operation.

For example `False AndAlso FunctionCall` always results in `False` even when the `FunctionCall` invocation would raise an exception. In contrast, `False And FunctionCall` also evaluates `FunctionCall`, and results in an exception if `FunctionCall` raises an exception.

Similarly, `True OrElse FunctionCall` always results in `True`, no matter what the return value of `FunctionCall` would be.

The use of non-short-circuit logic in a boolean context is likely a mistake, one that could cause serious program errors as conditions are evaluated under the wrong circumstances.

## How to fix it

### Code examples

#### Noncompliant code example

    If GetTrue() Or GetFalse() Then ' Noncompliant: both sides evaluated
    End If

#### Compliant solution

    If GetTrue() OrElse GetFalse() Then ' Compliant: short-circuit logic used
    End If

## Resources

### Documentation

- Logical and Bitwise Operators in Visual Basic
- Short-circuit evaluation
- Boolean operators

### Articles & blog posts

- Eric Lippert’s blog - When would you use & on a bool?