2014-03-26 43 views
0

說我創建聲明一個數組:在C#中的數組聲明?

byte[] Data = new byte[4]; 

我在代碼與陣列玩,與一些值填充它,等後來,如果我說:

Data = new byte[16]; 

什麼我在做什麼:我完成擺脫舊的數組和創建一個新的空索引與16索引?還是我保持與之前相同的數組,但只是擴展索引的總數?

+0

'Array.Resize(Data,Data。長度+ 12)'?這將創建一個包含16個元素的新陣列並保留舊的4個元素 – 2014-03-26 17:53:27

回答

4

我在做什麼:我完成擺脫舊的數組並創建一個新的空索引與16索引?

是。舊的數組最終會被垃圾收集,然後「走開」(只要沒有其他引用)。您的新陣列不會保留任何原始值。

還是我保持與以前相同的數組,但只是擴展索引的總數?

你不是。如果你想要這種行爲,可以考慮使用List<byte>,它的作用與數組非常相似,但會根據需要增長。

您還可以使用Array.Resize(Data, 16)「調整」陣列的大小。在內部,這將創建一個新數組,然後將舊數組中的值複製到新數組中,因此結果長度爲16,但仍保留原始4個值。

0

您正在創建一個新數組並將其設置爲舊數組的引用。

一旦所有的引用都從一個對象中消失了,垃圾收集器就會將其從內存中刪除。

1

您沒有增長現有陣列。 Data是一個參考,發生了什麼是你將該引用分配給一個新的內存塊(分配的byte[16]),並且假設沒有其他引用等於Data你孤立了你之前分配的內存將會導致它被垃圾收集。如果說,你做到了;

var Data = new byte[4]; 
var Data1 = Data; 
Data = new byte[16]; 

那麼原來的四個字節的內存不會被排隊等待垃圾收集,直到Data1超出範圍,因爲你仍然有該內存的引用。

0

當你創建一個數組時,在這種情況下,Array類對象是在內部創建的。

byte [] Data = new byte [4];

在這一行數據只是一個指向內存的引用變量。

Data = new byte [16];

當您執行此語句時,它意味着您已創建新數組並將其引用傳遞給數據引用變量。現在它丟失了舊的數組,並指向新的數組。