Assume myObj is null. Is it safe to write this?
if(myObj != null && myObj.SomeString != null) I know some languages won't execute the second expression because the && evaluates to false before the second part is executed.
Relying sentence example. Antonio, relying on the popular hostility to a Spanish ruler, presented himself as a candidate.
In this page you can discover 8 synonyms, antonyms, idiomatic expressions, and related words for rely on, like: depend on, count on, reckon on, believe in, trust, depend upon, bank on and rely upon.
rely on/upon somebody/something for something As babies, we rely entirely on others for food. rely on/upon somebody/something to do something These days we rely heavily on computers to organize our work. rely on/upon somebody/something doing something The industry relies on the price of raw materials remaining low.
verb (used without object), re·lied, re·ly·ing. to depend confidently; put trust in (usually followed by on or upon): You can rely on her work.
Yes. In C# && and || are short-circuiting and thus evaluates the right side only if the left side doesn't already determine the result. The operators & and | on the other hand don't short-circuit and always evaluate both sides.
The spec says:
The
&&and||operators are called the conditional logical operators. They are also called the “shortcircuiting” logical operators.
...
The operationx && ycorresponds to the operationx & y, except thatyis evaluated only ifxistrue
...
The operationx && yis evaluated as(bool)x ? (bool)y : false. In other words,xis first evaluated and converted to typebool. Then, ifxistrue,yis evaluated and converted to typebool, and this becomes the result of the operation. Otherwise, the result of the operation isfalse.
(C# Language Specification Version 4.0 - 7.12 Conditional logical operators)
One interesting property of && and || is that they are short circuiting even if they don't operate on bools, but types where the user overloaded the operators & or | together with the true and false operator.
The operation
x && yis evaluated asT.false((T)x) ? (T)x : T.&((T)x, y), whereT.false((T)x)is an invocation of theoperator falsedeclared inT, andT.&((T)x, y) is an invocation of the selectedoperator &. In addition, the value (T)x shall only be evaluated once.In other words,
xis first evaluated and converted to typeTandoperator falseis invoked on the result to determine ifxis definitelyfalse.
Then, ifxis definitelyfalse, the result of the operation is the value previously computed forxconverted to typeT.
Otherwise,yis evaluated, and the selected operator&is invoked on the value previously computed forxconverted to typeTand the value computed foryto produce the result of the operation.
(C# Language Specification Version 4.0 - 7.12.2 User-defined conditional logical operators)
Yes, C# uses logical short-circuiting.
Note that although C# (and some other .NET languages) behave this way, it is a property of the language, not the CLR.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With