2017-08-10 80 views
-3

我開始閱讀關於參考和值類型的更多信息。我有這種情況的一個問題:引用或值類型?

int[] array = { 1, 3, 5, 7, 9 }; 

var result = from element in array 
      let v = element * 100 
      where v >= 500 
      select v; 

foreach (var element in result) 
    Console.WriteLine(element); 

如何大家知道數組是引用類型,而是讓我什麼是中斷?當我拆分數組中的值類型的部分。這些是什麼?

+2

這個問題有點不清楚。 'v'是一個'int',當然也是一個值類型。什麼讓你困惑?你能舉個例子說明你期望什麼樣的行爲或類似的行爲嗎?你一定知道你的查詢不會改變你的數組或其中的元素。 –

+1

這是不是很清楚你問什麼。元素類型是「int」,它仍然是一個值類型。 –

+0

然而,實際的* list *是一個引用類型,其元素是值類型的實例。 – HimBromBeere

回答

1

是的,arrays總是reference types。然而,array只是一個項目的集合。收集的物品不會因爲它們在集合中而改變其類型。 int幾乎總是int,因此是value type,無論它是否intarray或不。

如果你改變你的代碼

Console.WriteLine(element.GetType()); 

你會看到,它會輸出

System.Int32 

在你的結果每個元素。

+2

「一個'int'將永遠是一個'int' ...」你在這裏忘記拳擊。有時一個int被封裝在一個對象中。 –

+1

@DavidArno真的,我的答案非常簡單,我會將其改爲「幾乎總是」。 ;) – waka

+3

@DavidArno是真的,但在這種特殊情況下,這又是如何相關的? –

2

如果我正確理解了你,你會問當你操縱值類型時會發生什麼,如int

從技術上講,你不能操縱數值類型。相反,每次執行操作時都會創建一個新值。

所以在你的例子中v仍然是一個值類型。但是,您可以強制編譯器拳擊/把一個值類型爲引用類型,反之亦然拆箱它:

Object obj = (object) 10; 
int i = (int) obj; 

瞭解更多關於這個話題here