为什么以下代码是非法的?
using System;
class Program
{
static void Main(string[] args) {
int i = 0;
--i++;
Console.WriteLine(i);
}
}
它在--i++
上给出了以下错误:
The operand of an increment or decrement operator must be a variable, property or indexer
我知道这段代码没有实际用途;我只是好奇为什么不允许这样做。我不在乎可以通过删除该行而无需其他效果来修复它。由于此标记为language-lawyer,请包含语言规范中的证据。
答案 0 :(得分:13)
--
返回一个值,而不是一个变量,但是++
处的运算符期望它是一个变量,这就是它不起作用的原因。
答案 1 :(得分:7)
来自C#规范" 7.6.9后缀增量和减量运算符":
后缀增量或减量操作的操作数必须是分类为变量,属性访问或索引器访问的表达式。操作的结果是与操作数相同类型的值。
我认为这可以回答你的问题。
这也是您无法i++++
执行的原因,也是括号的原因:(i++)++
也会出现相同的编译错误。
答案 2 :(得分:3)
--
和++
运营商不会返回值,他们更改他们运营的变量。无论您尝试评估--i++
的哪个顺序,第一个运算符都会返回值,第二个运算符将无法将其返回值分配回来。