[英]Why is “ref” not assigning updated value to the next field?
我發現了一個非常酷的編譯器功能。 但是,我無法理解這種行為的邏輯。
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。
我的問題是:
既然你把它寫成了;
return i++
這仍然會返回2
為一個值,但它會增加a
值到3
中表達后。
如果你把它寫成;
return ++i
這將返回遞增的值3
,並且由於在執行它之后a
將是3
,因此將打印6
作為結果。
進一步閱讀
i++
是后增量運算符。 它將在之后遞增值,而不是在返回值之前。
將i++
更改為++i
以使其在返回值之前遞增,或者在單獨的語句中遞增值,然后返回值:
static int IncrementValue(ref int i) { return ++i; }
要么:
static int IncrementValue(ref int i) { i++; return i; }
(返回整數時看到不同值的原因是結果被復制。它不是引用,否則return語句根本沒用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.