This question already has answers here:
Post-increment within a self-assignment

(6个答案)


3年前关闭。




这是一个简单的控制台应用程序代码,它返回的结果我并不完全理解。

尝试考虑是否在控制台中输出0、1或2:
using System;

namespace ConsoleApplication
{
    class Program
    {
        static void Main()
        {
            int i = 0;
            i += Increment(ref i);

            Console.WriteLine(i);
            Console.ReadLine();
        }

        static private int Increment(ref int i)
        {
            return i++;
        }
    }
}

答案是0。

我不明白的是为什么在i++(不是在传递的变量的副本上)执行的Increment方法中,post post ref会增加变量,但是稍后会被忽略。

我的意思是在这段视频中:

c# - 有趣的采访练习结果: return,帖子增量和裁判行为-LMLPHP

有人可以解释这个例子吗,为什么在调试过程中我看到该值增加到1,但是又回到0?

最佳答案

i += Increment(ref i);等效于

i = i + Increment(ref i);

赋值右侧的表达式是从左到右求值的,因此下一步是
i = 0 + Increment(ref i);
return i++返回i的当前值(为0),然后递增i
i = 0 + 0;

在分配之前,i的值为1(在Increment方法中增加),但是分配再次将其设为0。

关于c# - 有趣的采访练习结果: return,帖子增量和裁判行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43539718/

10-11 01:39