为什么同时使用前缀和后缀都是非法的?

时间:2014-12-05 15:19:39

标签: c# language-lawyer postfix-operator prefix-operator

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

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

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

3 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:7)

来自C#规范" 7.6.9后缀增量和减量运算符":

  

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

我认为这可以回答你的问题。

这也是您无法i++++执行的原因,也是括号的原因:(i++)++也会出现相同的编译错误。

答案 2 :(得分:3)

--++运营商不会返回值,他们更改他们运营的变量。无论您尝试评估--i++的哪个顺序,第一个运算符都会返回,第二个运算符将无法将其返回值分配回来。