这是一个简单的控制台应用程序代码,它返回一个我完全不理解的结果。有趣的访谈练习结果:返回,递增和参考行为
试想想它是否输出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
方法,它在ref
上执行(不在传入变量的副本上)会增加变量,但稍后会被忽略。
我的意思是在这个视频:
有人能解释一下这个例子,为什么在调试期间我看到值增加1,但随后又回到0?
当执行'返回i ++'时,i(它是0)的值在它递增前返回。当增量可能发生时,该值将被丢弃,因为它已经返回。试着做'return ++ i;'来代替。 – shahkalpesh
是的,但是你正在更新参考....它不应该回落到0.并且它被执行,因为调试器中的值被更新为1 – Sidewinder94
这是因为后增量运算符。 尝试阅读Eric Lippert的这个优秀答案,以了解后增量如何工作: http://stackoverflow.com/questions/3346450/what-is-the-difference-between-i-and-i/3346729#3346729 – Boney