为什么"ref"没有为下一个字段分配更新值?

Ste*_*pUp 3 .net c# ref pass-by-reference post-increment

我发现了一个非常酷的编译器功能.但是,我无法理解这种行为的逻辑.

static int IncrementValue(ref int i) { return i++;}
Run Code Online (Sandbox Code Playgroud)

和主要方法:

static void Main(string[] args)
{
    int a = 2;
    int b = IncrementValue(ref a);
    Console.WriteLine(a+b);
} 
Run Code Online (Sandbox Code Playgroud)

输出为5.

我的问题是:

  1. 为什么"b"字段等于2?(在我看来,它应该是3,因为"ref"关键字不是按值复制,而是关键字按值逐字段.因此,"b"应该是"a + 1")

Son*_*nül 5

既然你把它写成了;

return i++
Run Code Online (Sandbox Code Playgroud)

仍将2作为值返回,但它会在表达式之后增加a3.

如果你把它写成;

return ++i
Run Code Online (Sandbox Code Playgroud)

这将返回递增的值,这将是3,并且因为a3在执行它之后,它将6作为结果打印.

进一步阅读