关于C#:为什么这个片段将答案显示为6?

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());
        }

i--返回i的值,并返回减量前的值。

您应该按照词汇顺序(按照创建者的意图)逻辑地阅读它:

1
2
puts the value
and then decrements

如果之前是6,则返回6(打印出来),即使在i的值为5之后也是如此。

注意,--i递减并返回递减值。


i--返回预递减值。如果需要减量后的值,则需要--i


i--表示使用后i递减。


这个(变量--)是一个后缀递减操作。

来自MSDN:

The result of the operation is the value of the operand"before" it
has been decremented.

所以toString()被应用于"i"的当前值(6),然后它的值被递减。

另请参见msdn:postfix递增和递减运算符中的c规范。