Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么此代码段将答案显示为6?_C#_C# 4.0 - Fatal编程技术网

C# 为什么此代码段将答案显示为6?

C# 为什么此代码段将答案显示为6?,c#,c#-4.0,C#,C# 4.0,我的一个同学问了这个问题,我想确定我告诉了他正确的答案。基本上,下面的代码(确实显示“6”作为答案)在到达MessageBox.Show((i--).ToString());)时把他弄糊涂了 我的解释是减量操作(i--)实际上没有发生,因为它被传递给MessageBox对象的.Show方法。所以它显示为6,因为它实际上并没有减少1 这是正确的解释吗?我从未尝试过在同时显示值的同时抛出inc/dec操作,因此我不确定我的推理是否正确。谢谢 int i = 6;

我的一个同学问了这个问题,我想确定我告诉了他正确的答案。基本上,下面的代码(确实显示“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());
        }
i--
返回i的值并返回减量之前的值

你应该按照词汇顺序逻辑地阅读它(正如创作者所希望的那样):

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

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

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

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

此(变量--)是后缀递减操作

:

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

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


另请参见msdn中的C#规范:

“返回i的值,然后递减。”这是错误的。两种情况下的操作顺序完全相同。区别在于实际返回的值(递增或不递增)啊,谢谢!“现在说得通了,”蒂格兰说,“这取决于你回来的意思。当我试图给出运算符^^^@dystroy的逻辑含义时,这一评论无助于澄清问题:对于每个操作,深入了解它的实现方式很重要(至少要知道它不是原子的,也不是“线程安全的”)。但是,当您讨论操作符的细节时,这种深层细节很有趣,而不是在分析上层算法时。我同意你的链接很有趣。只是离题了。
puts the value
and then decrements