2014-12-05 15 views
1

为什么以下代码是非法的?为什么同时使用prefix和postfix是非法的?

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

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

回答

7

从C#规范“7.6.9后缀增量和减量运算符”:

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

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

这也是你不能这样做的原因i++++,也没有括号:(i++)++也给出了相同的编译错误。

13

--返回一个值,而不是一个变量,但在++运营商希望它是一个变量,这就是为什么它不工作。

3

--++运营商不只是返回值,他们改变变量他们进行操作。无论您尝试评估哪个订单--i++,第一个操作员将返回,第二个操作员将无法将其返回值分配回。

相关问题