Why does this snippet display the answer as 6?
本问题已经有最佳答案,请猛点这里访问。
我的一个同学问了这个问题,我想确保我告诉他正确的答案。基本上,下面的代码(它确实显示"6"作为答案)在到达messagebox.show((i--).toString());时让他感到困惑。
我的解释是,递减操作(i--)实际上没有发生,因为它正在传递给MessageBox对象的.show方法。所以它显示6,因为它实际上并没有将该值减少1。
这是正确的解释吗?我从未尝试在同时显示值的同时抛出inc/dec操作,因此我不确定我对此的推理是否正确。谢谢!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int i = 6; // I starts as 6... if (i >=4 ) // Then the check to see if i >= 4 is TRUE... { if( i == 5) // The check to see if i == 5 is FALSE... { MessageBox.Show(i.ToString()); } else { MessageBox.Show((i--).ToString()); // **** } } else { MessageBox.Show((i++).ToString()); } |
您应该按照词汇顺序(按照创建者的意图)逻辑地阅读它:
1 2 | puts the value and then decrements |
如果之前是6,则返回6(打印出来),即使在i的值为5之后也是如此。
注意,
这个(变量--)是一个后缀递减操作。
来自MSDN:
The result of the operation is the value of the operand"before" it
has been decremented.
所以toString()被应用于"i"的当前值(6),然后它的值被递减。
另请参见msdn:postfix递增和递减运算符中的c规范。