提问人:George Duckett 提问时间:6/14/2011 最后编辑:AntonioGeorge Duckett 更新时间:8/18/2023 访问量:17387
为什么没有||= 或 &&= 运算符?
Why are there no ||= or &&= operators in C#?
答:
53赞
Eric Lippert
6/14/2011
#1
为什么逻辑运算符被排除在外?有没有很好的技术理由来解释为什么它很难?
他们没有。你可以做,或者,如果你愿意。&=
|=
^=
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
评论
45赞
Ben Voigt
6/14/2011
我以前想要短路化合物分配。没有人使用它们,因为它们不存在。另请参阅 stackoverflow.com/questions/2324549,其中提供了许多示例用例。
4赞
Ed S.
6/15/2011
您能否向我公司的一些(不愿透露姓名)成员解释“只有少数人会使用它,它增加了复杂性,并且无论如何都有一种现有的方法可以实现既定目标”的论点?我试过了,但显然失败了。:)
14赞
daver
8/10/2013
回复:“在什么情况下你想说”?这些情况: 我有一个元素数组,需要测试每个元素的一些条件,所以我遍历数组并创建一个“运行总计”: 或者我可能想做一个运行总计的“OR”。事实上,在我现在正在做的一个项目中,我就遇到了这样的情况。有那么傻吗?b1 ||= b2; ...
result=TRUE; for (i...) {result &&= a[i];}
29赞
Ole Albers
10/6/2017
我强烈不同意这种愚蠢的:)我只是有以下要求:,其中和是需要数据库选择的昂贵方法。在这些情况下,出于性能原因,我显然不能使用,必须使用,并且确实会有所帮助。isAdmin |= IsGroupAdmin(); isAdmin |= IsCompanyAdmin()
IsGroupAdmin()
IsCompanyAdmin()
|=
isAdmin=isAdmin ||...
||=
21赞
Tanktalus
4/5/2018
&&=
而且远非傻傻。当 RHS 价格昂贵时,它们非常有用。无论是数据库查找还是 URL 提取或正则表达式匹配或......对于这样的运营商来说,有大量严肃的用例。( 也属于同一类别 - 如果它为 null,则执行这个昂贵的大操作来确定一个值)。我很难认真对待一个认为这很愚蠢的人。||=
??=
2赞
Jinghuan Wen
8/9/2019
#2
也许只是使用
isAdmin = isAdmin || IsGroupAdmin()
我想这部分是因为有点令人困惑,因为可能有两个版本的实现:,或。它们的行为不同,因为表达式的右侧有时没有被评估。a ||= b
a = a || b
a = b || a
评论
12赞
Hagen von Eitzen
3/14/2021
Non sequitur.有,没有人对可能有一个实现而不是a -= b
a = b - a
a = a - b
0赞
Arsenii
8/18/2023
#3
在 C# 中,有一个双问号运算符(空合并运算符)。
它有两种形式:
a = b ?? c;
和
a ??= b;
第一个计算结果为:a = b != null ?乙:丙; 第二个 - 是你要问的:a = a != null ?答:乙;
当然,在这些变量中的任何一个位置上都可能是复杂的表达式。
下面是一个参考:空合并运算符
评论