为什么这个片段显示答案为6?

时间:2012-05-03 17:40:36

标签: c# c#-4.0

我的同学问了这个问题,我想确定我告诉他正确的答案。本质上,下面的代码(确实显示“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 个答案:

答案 0 :(得分:8)

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

你应该按照词汇顺序(按照创作者的意图)逻辑阅读:

puts the value
and then decrements

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

i--表示使用后减少。

答案 3 :(得分:1)

这(变量 - )是 postfix 减量操作。

From msdn

  

操作的结果是操作数“之前”的值   已经减少了。

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

另见C#规范。在msdn:Postfix increment and decrement operators