2

为什么下面的代码是非法的?

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

我知道这段代码没有实际用处;我只是好奇为什么不允许这样做。我不在乎可以通过删除该行来修复它而没有其他影响。由于这被标记为,请包括语言规范中的证据。

4

3 回答 3

13

--返回一个值,而不是变量,但运算符 at++期望它是一个变量,这就是它不起作用的原因。

于 2014-12-05T15:22:34.947 回答
7

来自 C# 规范“7.6.9 后缀递增和递减运算符”:

后缀递增或递减操作的操作数必须是分类为变量、属性访问或索引器访问的表达式。运算的结果是与操作数相同类型的值。

我认为这回答了你的问题。

这也是你不能做的原因i++++,也不能使用括号:(i++)++也会给出相同的编译错误。

于 2014-12-05T15:25:19.247 回答
3

--and++运算符不只是返回值,它们改变了它们操作的变量。无论您尝试评估哪个顺序--i++,第一个运算符都会返回一个value,第二个运算符将无法将其返回值分配回。

于 2014-12-05T15:28:48.070 回答