2

我的一个同学问了这个问题,我想确定我告诉他的答案是正确的。基本上下面的代码(确实显示“6”作为答案)在到达 MessageBox.Show((i--).ToString()); 时让他感到困惑。

我的解释是递减操作 (i--) 实际上并没有发生,因为它被传递给 MessageBox 对象的 .Show 方法。所以它显示 6 因为它实际上并没有将该值减少 1。

这是正确的解释吗?我从来没有尝试过在同时显示值的同时抛出 inc/dec 操作,所以我不确定我的推理是否正确。谢谢!

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

4 回答 4

8

i--返回 i 的值并返回递减前的值。

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

puts the value
and then decrements

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

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

于 2012-05-03T17:43:32.613 回答
4

i--返回减量前的值。如果你想要递减后的值,你想要--i

于 2012-05-03T17:44:12.937 回答
2

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

于 2012-05-03T17:44:26.977 回答
1

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

来自 msdn

操作的结果是操作数“之前”被递减的值。

因此 ToString() 应用于“ i ”的当前值(6),然后它的值递减。

另请参阅 C# 规范。在 msdn:后缀递增和递减运算符

于 2012-05-03T18:24:13.630 回答