运算符在C#中堆叠

时间:2014-09-21 14:16:01

标签: c# operators

在转动Int32时,为什么在键入行

时C#会给我一个错误
++this.pivot %= 21;

它说

  

左侧必须是变量,属性或索引器。

但是它应该是完全正常的,因为一元运算符优先于其他任何东西,并且在尝试模数1之前计算其结果。

但是,它不起作用。如果我把它放在括号内,它也不起作用。

为什么?有人有线索吗?

2 个答案:

答案 0 :(得分:3)

因为您正在尝试进行作业,但左侧有声明。

您可能已经知道,这句话:

this.pivot %= 21;

是否适用于:

this.pivot = this.pivot % 21;

这里左侧是变量。 ++this.pivot返回的值不是变量。所以你不能分配一个这样的值是无效的:

12 = this.pivot % 21;

// or
int x = 23;
++x = x % 20;

这就是您收到错误消息的原因。为了解决这个问题,你应该将你的陈述分开:

++this.pivot;
this.pivot %= 21;

答案 1 :(得分:0)

您不能将表达式的结果存储在另一个表达式中:

虽然this.pivot是变量,++this.pivot显然不是,this.pivot操作之前或之后%=也没有占位符。