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

时间:2011-06-14 15:23:09

标签: c# operators language-design assignment-operator compound-assignment

我们为所有逻辑运算符,Shift运算符,Additive运算符和所有Multiplicative运算符都有等效的赋值运算符。

为什么逻辑运算符被遗漏了? 是否存在很难的技术原因?

2 个答案:

答案 0 :(得分:48)

  

为什么逻辑运算符被遗漏了?是否存在很难的技术原因?

他们没有。如果需要,您可以&=|=^=

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

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

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

如果左侧不改变,则不评估右侧?似乎只有少数人会真正使用这个功能,为什么要把它放进去?

有关复合运算符的更多信息,请参阅我的严肃文章:

http://blogs.msdn.com/b/ericlippert/archive/2011/03/29/compound-assignment-part-one.aspx

以及后续的愚人节文章:

http://blogs.msdn.com/b/ericlippert/archive/2011/04/01/compound-assignment-part-two.aspx

答案 1 :(得分:1)

也许只是使用

isAdmin = isAdmin || IsGroupAdmin()

我想部分原因是a ||= b有点令人困惑,因为实现可能有两个版本:a = a || ba = b || a。而且它们的行为有所不同,因为有时不评估表达式的右侧。