We have equivalent assignment operators for all Logical operators, Shift operators, Additive operators and all Multiplicative operators.
Why did the logical operators get left out? Is there a good technical reason why it is hard?
We have equivalent assignment operators for all Logical operators, Shift operators, Additive operators and all Multiplicative operators.
Why did the logical operators get left out? Is there a good technical reason why it is hard?
Why did the logical operators get left out? Is there a good technical reason why it is hard?
They didn't. You can do &=
or |=
or ^=
if you want.
bool b1 = false;
bool b2 = true;
b1 |= b2; // means b1 = b1 | b2
The ||
and &&
operators do not have a compound form because frankly, they're a bit silly. Under what circumstances would you want to say
b1 ||= b2;
b1 &&= b2;
such that the right hand side is not evaluated if the left hand side does not change? It seems like only a few people would actually use this feature, so why put it in?
For more information about the compound operators, see my serious article here:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/compound-assignment-part-one
and the follow-up April-Fools article here:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/compound-assignment-part-two
maybe just use
isAdmin = isAdmin || IsGroupAdmin()
I guess it is partially because a ||= b
is kind of confusing because there might be two versions of the implementation: a = a || b
, or a = b || a
. And they act differently because the right-hand side of the expression is sometimes not evaluated.
In the C# there is a double question mark operators (null-coalescing operators).
There are two forms of it:
a = b ?? c;
and
a ??= b;
The first one evaluates as: a = b != null ? b : c; The second one - is what you are asking: a = a != null ? a : b;
Sure, at the place of any of these vars might be complex expressions.
Here is a reference: null-coalescing operators