C# 运算符的优先级和关联性

表1 显示了 C#运算符的优先级,其中顶部的运算符有最高的优先级(即在包含多个运算符的表达式中,最先计算该运算符)。.

C# 运算符的优先级和关联性
除了运算符优先级,对于二元运算符,需要注意运算符是从左向右还是从右向左计算。除了少数运算符,所有的二元运算符都是左关联的。例如:

x + y + z

就等于:

(x + y) + z

需要先注意运算符的优先级,再考虑其关联性。在以下表达式中,先计算 y 和 z 相乘,再把计算的结果分配给 x,因为乘法的优先级高于加法:

x + y * z

关联性的重要例外是赋值运算符,它们是右关联。下面的表达式从右向左计算:

 x = y = z

因为存在右关联性,所有变量 x、y、z 的值都是 3,且该运算符是从右向左计算的。如果这个运算符是从左向右计算,就不会是这种情况:

int z = 3; 

int y = 2; 

int x = 1; 

x = y = z;

一个重要的、可能误导的右关联运算符是条件运算符。表达式 

a ? b: c ? d: e

等于:

a = b: (c ? d: e)

这是因为该运算符是右关联的。

注意

在复杂的表达式中,应避免利用运算符优先级来生成正确的结果。使用圆括号指定运算符的执行顺序,可以使代码更整洁,避免出现潜在的冲突。