C#, the "and" operators and lazy evaluation