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