C#自增运算符错误:操作数语法不正确?

3
我正在查看文档,试图理解操作符的实际作用。
增量运算符(++)将其操作数增加1。增量运算符可以出现在其操作数之前或之后:++variablevariable++
第一种形式是前缀递增操作。操作的结果是操作数在递增后的值。
第二种形式是后缀递增操作。操作的结果是在操作数递增之前的值。
我期望以下操作将返回3,但它不能编译,并声明该运算符必须是变量、属性或索引器:
int x = 0;
Console.WriteLine(x++ ++ ++);
/*Expected output: 3*/

为什么这是错误的?我是否应该假设x++不会返回相同类型的值给下一个++运算符?


2
它增加变量并返回结果。结果是一个结构体,而不是一个变量。这在语言中不受支持。请注意,0++也无法编译。 - user1228
1个回答

7
C# 6语言规范草案中得知:
后缀自增或自减操作的操作数必须是被分类为变量、属性访问或索引器访问的表达式。操作的结果是与操作数相同类型的值。 x是一个变量,但x++不是“变量、属性访问或索引器访问”。
现在,让我们想象一个这样的世界,在这个世界里后缀自增运算符调用是合法的。给定一个int x = 42;x++x增加到43,但它的值为42。如果x++ ++是合法的,它将应用于x++,这不是你想要的(它会增加临时变量,而不是x)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接