为什么 C# 中没有 ||= 或 &&= 运算符?

问题描述 投票:0回答:3

我们为所有逻辑运算符、移位运算符、加法运算符和所有乘法运算符提供等效的赋值运算符。

为什么逻辑运算符被省略了? 是否有一个很好的技术原因来解释为什么它很难?

c# operators language-design assignment-operator compound-assignment
3个回答
53
投票

为什么逻辑运算符被省略了?是否有一个很好的技术原因来解释为什么它很难?

他们没有。如果您愿意,您可以执行

&=
|=
^=

bool b1 = false;
bool b2 = true;
b1 |= b2; // means b1 = b1 | b2

||
&&
运算符没有复合形式,因为坦率地说,它们有点愚蠢。什么情况下你会想说

b1 ||= b2;
b1 &&= b2;

如果左侧没有改变,则右侧不会被评估?好像只有少数人会真正使用这个功能,所以为什么要添加它呢?

有关复合运算符的更多信息,请参阅我的严肃文章:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/compound-assignment-part-one

以及后续愚人节文章:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/compound-assignment-part-two


2
投票

也许只是使用

isAdmin = isAdmin || IsGroupAdmin()

我想部分原因是

a ||= b
有点令人困惑,因为可能有两个版本的实现:
a = a || b
a = b || a
。它们的行为不同,因为有时不计算表达式的右侧。


0
投票

在 C# 中有一个双问号运算符(空合并运算符)。

有两种形式:

a = b ?? c;

a ??= b;

第一个计算结果为:a = b != null ?乙:丙; 第二个 - 就是您要问的: a = a != null ?甲:乙;

当然,这些变量中的任何一个都可能是复杂的表达式。

这里有一个参考:空合并运算符

© www.soinside.com 2019 - 2024. All rights reserved.