簡體   English   中英

為什么“ref”沒有為下一個字段分配更新值?

[英]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。

我的問題是:

  1. 為什么“b”字段等於2? (在我看來,它應該是3,因為“ref”關鍵字不是按值復制,而是關鍵字按值逐字段。因此,“b”應該是“a + 1”)

既然你把它寫成了;

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM