The binary '&' operator serves two masters. From MSDN:
Binary & operators are predefined for the integral types and bool. For
integral types, & computes the logical bitwise AND of its operands.
For bool operands, & computes the logical AND of its operands; that
is, the result is true if and only if both its operands are true.
Since '0' and 'CheckDate' don't have matching types, this ambiguity
isn't an issue in the expression above.
The relational > operator has higher precedence than the logical &
operator, so both operands of the & operator are boolean, and so the
so-called ambiguity would in fact be an issue, if it existed.
"MyList.Count > 0" is evaluated before the rest of the clause.
However, I don't see it as an ambiguity anyway. The logical & operator
does the same thing with two booleans that it would do with two ints. It
just doesn't bother to promote the result to an int. The behavior doesn't
really change depending on the type, any more than the * operator's
behavior changes according to operand type (use * with two ints, you get
an int, use it with two longs, you get a long).
But the & operator is not a conditional operator, and since one should
expect only a conditional operator to short-circuit, I don't find the lack
of short-circuiting surprising at all.
C/C++ works in exactly the same way. It has the same logical & operator,
and that operator always requires both of its operands to be evaluated.
Pete