45

对于所有逻辑运算符,Shift运算符,Additive运算符和所有乘法运算符,我们都有等效赋值运算符。为什么C#中没有|| =或者&& =运算符?

为什么逻辑运算符会被忽略? 难道有一个很好的技术原因吗?

+0

@ p.campbell - 其中一些真的是! – Yuck 2011-06-14 15:25:44

+0

你有使用它们的原因吗? – 2011-06-14 15:30:28

+0

你能提供一个他们会有用的例子吗? – Fosco 2011-06-14 15:32:49

回答

47

为什么逻辑运算符会被遗漏?有一个很好的技术原因,为什么它很难?

他们没有。如果你愿意,你可以做&=|=^=

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

+12

我以前想过短路复合分配。没有人使用它们,因为它们不存在。另请参阅http://stackoverflow.com/questions/2324549,其中给出了一些示例用例。 – 2011-06-14 15:50:20

+3

您能解释一下我的公司的一些(不被称呼的)成员的“只有少数人会使用它,它增加了复杂性,而且有一种现成的方式来完成既定的目标”吗?我试过了,显然失败了。 :) – 2011-06-14 16:00:10

+4

re:“你想在什么情况下说'b1 || = b2; ...'”?这些情况:我有一个元素数组,需要为每个元素测试一些条件,所以我循环遍历数组并创建一个'运行总数'sorts:'result = TRUE; for(i ...){result && = a [i];}'或者我可能想要执行一个'OR'的运行。事实上,我现在正在开展的一个项目中遇到了这样的情况。这很愚蠢吗? – daver 2013-08-10 14:59:50