Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么没有| |=或&&;=C#中的运算符?_C#_Operators_Language Design_Assignment Operator_Compound Assignment - Fatal编程技术网

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

为什么没有| |=或&&;=C#中的运算符?,c#,operators,language-design,assignment-operator,compound-assignment,C#,Operators,Language Design,Assignment Operator,Compound Assignment,所有逻辑运算符、移位运算符、加法运算符和乘法运算符都有等价的赋值运算符 为什么逻辑运算符被遗漏了? 有没有一个很好的技术原因来解释它的困难 为什么逻辑运算符被遗漏了?有没有一个很好的技术原因来解释它的困难 他们没有。如果需要,您可以执行&=或|=或^= bool b1 = false; bool b2 = true; b1 |= b2; // means b1 = b1 | b2 |和&&运算符没有复合形式,因为坦率地说,它们有点傻。在什么情况下你想说 b1 ||= b2; b1 &&

所有逻辑运算符、移位运算符、加法运算符和乘法运算符都有等价的赋值运算符

为什么逻辑运算符被遗漏了? 有没有一个很好的技术原因来解释它的困难

为什么逻辑运算符被遗漏了?有没有一个很好的技术原因来解释它的困难

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

bool b1 = false;
bool b2 = true;
b1 |= b2; // means b1 = b1 | b2
|
&&
运算符没有复合形式,因为坦率地说,它们有点傻。在什么情况下你想说

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

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

下面是愚人节的后续文章:

也许只是使用

isAdmin = isAdmin || IsGroupAdmin()

我想这部分是因为
a | | b
有点混乱,因为可能有两种版本的实现:
a=a | | b
,或者
a=b | a
。它们的作用不同,因为表达式的右侧有时不求值。

您使用它们的原因是什么?您能提供一个它们有用的示例吗?我以前一直希望短路复合赋值。没有人使用它们,因为它们不存在。另请参见其中给出的一些示例用例。您能否向我公司的一些成员(未透露姓名)解释“只有少数人会使用它,它增加了复杂性,并且有一种现有的方法来实现既定目标”的论点?我试过了,但显然失败了。:)re:“在什么情况下你想说
b1 | |=b2;…
”?这些情况:我有一个元素数组,需要测试每个元素的一些条件,所以我循环遍历数组并创建一个排序的“运行总数”:
result=TRUE;对于(i..{result&&=a[i];}
,或者我可能希望计算“或”的运行总数。事实上,在我正在进行的一个项目中,我遇到过这样的情况。这很愚蠢吗?我强烈反对愚蠢:)我只是有以下要求:
isAdmin |=IsGroupAdmin();isAdmin |=IsCompanyAdmin()
,其中
IsGroupAdmin()
IsCompanyAdmin()
是需要数据库选择的昂贵方法。在这些情况下,我不能使用
|=
,显然是出于性能原因,必须使用
isAdmin=isAdmin | | |
,而
|=
会很有帮助。
&&
|=
绝非愚蠢。当RHS价格昂贵时,它们非常有用。无论是数据库查找、URL获取、正则表达式匹配还是。。。对于这样的操作员,有大量的严重用例。(
??=
也属于同一类别-如果为空,则执行此大而昂贵的操作以确定值)。我很难认真对待一个认为这很愚蠢的人。存在
a-=b
,没有人会感到困惑,认为可能存在实现
a=b-a
而不是
a=a-b