在c# 语言规范中 ,可以找到“除了赋值运算符,所有二元运算符都是左关联的”

但它会为平等运营商带来不同吗? ==和!=?

说:bool X,Y,Z ......

return x == Y == z ...依此类推?

即使x,y,z ...的顺序在return语句中有所不同,结果总是相同的,总是返回相同的值吗? (如果x,y,z的init值明显相同)

(x == y)== z等于x ==(Y == z)和(x!= y)== z等于x!=(Y == z)

对?

===============>>#1 票数:13 已采纳

在C#4.0语言规范中,它被发现“除了赋值运算符,所有二元运算符都是左关联的”

仅供参考该行是错误的。 空合并运算符也是右关联的 - 并不是真正重要的。 有关Jon对此问题的深入分析,请参阅https://stackoverflow.com/a/6269773/88656

是否会使等式运算符==!=仅在bools上运行?

不。正如您所正确注意的那样,只处理相等运算符时,运算符关联性是无关紧要的。 虽然这是一个有趣的琐事,但我不确定为什么它特别相关。

很多人都回答说它有所不同,因为操作数可能会产生副作用。 这些人错了; 这是一个非常常见的错误。 评估操作数的顺序与运算符的优先级或关联性无关。 例如,在C中,允许符合要求的实现以任何顺序计算副作用。 如果你说:

x = (A() != B()) == C();
y = D() != (E() == F());

在C中,您可以保证D(),E()和F()不会在A(),B()和C()之前运行。 但是你无法保证在C()之前计算B()的副作用。 A(),B()和C()可以在C中以任何顺序执行,合法地执行。 操作员关联性,无论是“自然的”还是由括号强加的,都不会对可能计算副作用的顺序施加任何限制。

C#的情况有所改善。 在C#中,无论运算符的优先级或关联性如何,都可以保证操作数的副作用从左到右发生。 也就是说,如果你有A() + B() * C()那么你可以保证A()在B()之前发生,B()在C()之前发生,不管A()是什么参与加法,其优先级低于乘法。

运算符优先级和结合对照,其中运营商运行的顺序,而不是在其操作数计算的顺序。

===============>>#2 票数:8

bool x = false;
int y = 0;
int z = 1;

Console.WriteLine(x == y == z);//won't compile
Console.WriteLine(y == z == x);//will compile

一切都归结为==的相关性。

===============>>#3 票数:5

在你的例子中,它很重要。 x==y==z意味着“Z是一个bool,如果'x == y && z == true'或者'x!= y && z == false'”,该行将返回true。

所以是的,这很重要。

===============>>#4 票数:1

把它想象为(x ^ y ^ z),你就会有答案。

===============>>#5 票数:0

结果将是相同的。 ==!=的关联性无关紧要,但必须选择关联性。

===============>>#6 票数:0

如果您为具有副作用的相等运算符提供了重载,则可能会产生影响。 一个可怕而毫无意义的想法,显然,但可能。

  ask by Niklas translate from so

未解决问题?本站智能推荐:

3回复

我是否必须定义每个运营商?

假设我有一个只有一个字段的结构: 这很好用,直到我想做这样的事情: 所以,我实现了IEquatable<in T>和IComparable<in T> ,但是仍然没有启用任何运算符(甚至不是== , < , >=等)。 所以,我开始提供运
13回复

|之间有什么区别?和||还是运营商?

我一直用|| OR表达式中的(两个管道),包括C#和PHP。 偶尔我看到使用了一个管道: | 。 这两种用法有什么区别? 当使用一个在另一个之上时是否有任何警告或者它们是否可以互换?
3回复

什么是正确的名称? 运营商?

我在MSDN上看了一下,但它们似乎没有按名称引用它。 什么是官方名称?? 运营商?
2回复

c#联盟运营商

脚本 我有三个IEnumerable列表 - IEnumerable<Dog> , IEnumerable<Cat>和IEnumerable<Horse> 。 我希望它们在一个IEnumerable<NameColor> 。 我在每个D
5回复

我应该超载==运营商吗?

==运算符如何在C#中真正起作用? 如果它用于比较A类的对象,它会尝试匹配A的所有属性,还是会寻找指向同一内存位置(或者其他东西)的指针? 让我们创建一个假设的例子。 我正在编写一个利用Twitter API的应用程序,它有一个Tweet类,它具有单个推文的所有属性:文本,发送者,日期
2回复

C# - | 和&运营商?

编辑:我现在的主要问题是为什么需要重载这两个运算符才能使用&&和|| 运营商。 短路运营商不会采用对象的真值或假值并进行比较吗? 在哪里使用&&和|| 运营商是| 和&使用? 我正在阅读C#,完整的参考资料,我对|很困惑 和&运营商。 我习惯他
8回复

C# ? :运营商

有人可以解释一下以下编译器问题 错误:无法确定条件表达式的类型,因为'string'和'int'之间没有隐式转换 在最后一个示例中,也没有隐式转换。
4回复

&运营商的意义是什么?

在以下代码中: ...... (i & 1) == 1是什么意思?
2回复

限制因素和隐含的运营商

我有三个类A,B和C,一些属性在所有三个类中,有些属性不在 我想调用类XYZ的Execute方法... ......所有三个班级,如: 我的想法不起作用: 哪里出错了? 提前致谢!
2回复

运营商的意义? 在C#中的一个对象之后[重复]

这个问题在这里已有答案: 类型后面的问号的目的是什么(例如:int?myVariable)? 8个答案 我试图找到符号/运算符的含义? 在C#中。 用法示例: 我认为它必须使用null值。 当然,我查看了MSDN C#操作员页面,但没有在那里