我正在查看the docs并尝试了解运营商的实际运作方式。
增量运算符(++)将其操作数增加1.增量运算符可以出现在其操作数之前或之后:
++variable
和variable++
。第一种形式是前缀增量操作。操作的结果是操作数增加后的值。
第二种形式是后缀增量操作。操作的结果是操作数增加之前的值。
我希望以下操作返回3
,但它没有编译,并声明运算符必须是变量,属性或索引器:
int x = 0;
Console.WriteLine(x++ ++ ++);
/*Expected output: 3*/
为什么这是错的?我应该假设x++
没有为下一个++
运算符返回相同类型的值吗?
答案 0 :(得分:7)
来自draft C# 6 language specification:
后缀增量或减量操作的操作数必须是分类为变量,属性访问或索引器访问的表达式。操作的结果是与操作数相同类型的值。
x
是一个变量,但x++
不是“变量,属性访问或索引器访问权限。”
现在,让我们想象一个这样的后缀增量运算符调用合法的世界。给定int x = 42;
,x++
递增x
到43,但评估为42.如果x++ ++
合法,它将适用于x++
,这不是不是你想要的(它会增加临时值,而不是x
)