I am (still) learning C# - and I thought I understood the difference between & & && as well as | & ||
I think you are getting tripped up because C# has overloaded | and &. Used with numeric primitives then they are bitwise operations. Used with booleans then they are just like || and && except they don't short circuit.
For example
bool Foo() {
return false;
}
bool Bar() {
return true;
}
if(Foo() & Bar()) {
// do something
}
// versus
if(Foo() && Bar()) {
// do something 2
}
In the above example, the first boolean expression will execute both Foo() and Bar(), but in the second one only Foo() will execute.
IMO this is one of the worst decisions the C# team has made. It leads to confusing and occasionally subtle errors.