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 && y
corresponds to the operationx & y
, except thaty
is evaluated only ifx
istrue
...
The operationx && y
is evaluated as(bool)x ? (bool)y : false
. In other words,x
is first evaluated and converted to typebool
. Then, ifx
istrue
,y
is 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 && y
is evaluated asT.false((T)x) ? (T)x : T.&((T)x, y)
, whereT.false((T)x)
is an invocation of theoperator false
declared 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,
x
is first evaluated and converted to typeT
andoperator false
is invoked on the result to determine ifx
is definitelyfalse
.
Then, ifx
is definitelyfalse
, the result of the operation is the value previously computed forx
converted to typeT
.
Otherwise,y
is evaluated, and the selected operator&
is invoked on the value previously computed forx
converted to typeT
and the value computed fory
to 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