我发现了一个非常酷的编译器功能。但是,我无法理解这种行为的逻辑。
static int IncrementValue(ref int i) { return i++;}
和主要方法:
static void Main(string[] args)
{
int a = 2;
int b = IncrementValue(ref a);
Console.WriteLine(a+b);
}
输出为5.
我的问题是:
答案 0 :(得分:5)
因为你把它写成了;
return i++
这将仍然返回2
作为值,但在表达式后它会将a
值增加到3
。
如果你把它写成;
return ++i
这将返回递增的值3
,并且由于a
在执行后将3
,因此将打印6
。
进一步阅读
答案 1 :(得分:1)
i++
是 post 增量运算符。它会在之后递增值,而不是在返回值之前。
将i++
更改为++i
以使其在返回值之前递增,或者在单独的语句中递增值,然后返回值:
static int IncrementValue(ref int i) { return ++i; }
或者:
static int IncrementValue(ref int i) { i++; return i; }
(返回整数时看到不同值的原因是结果被复制。它不是引用,否则return语句根本没用)。