2014-09-23 206 views
-2

如何重新初始化數組?重新初始化數組

public int[] numbers; 

在我的情況numbers將具有未知長度的數組來設置。例如,當我第一次使用它,它就會有8種元素,下一次只有5,然後12

我讀了一些關於這個話題,只找到一個相關: http://social.msdn.microsoft.com/Forums/en-US/bee99ac8-4ade-40ac-aa78-8d14d1d7bf9f/c-reinitialize-arrays?forum=csharplanguage

即使我做不關心重新聲明(uhh)的內存使用情況,我不能這樣做,因爲我要在計時器的厚方法中使用數組,並且要使用相同的數組,直到計時器停止。然後再次調用函數,這會將元素放入數組中,然後再次啓動計時器。

編輯:

有在我的情況和陣列3個功能聲明爲公用變量。第一個函數稱爲doAction(),它調用另一個函數返回一個長度未知的數組。然後,doAction啓動timer1(厚方法),它需要從doAction到達數組。這就是爲什麼我使用全局變量來放置數組的原因。

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-09-23 01:56:56

+0

你能否澄清'numbers = new int [5]'有什麼問題?考慮顯示代碼而不是不清楚「,並會使用相同的數組,直到計時器停止。 – 2014-09-23 02:04:08

回答

0

當你第一次使用它,做

numbers = new int[5]; 
當你再次使用它

,做

numbers = new int[12]; 

如果它不是那麼簡單,那麼你有沒有解釋你的問題非常好。

+0

第一個被聲明的數組會發生什麼?它會被覆蓋,還是會在內存中,直到GC刪除它?還是這些不同的聲明? 我想要做的是聲明一個數組,它可以從類中的任何地方訪問,其長度可以改變(我知道長度不能直接改變,但我很好奇,如果有一個技巧或有什麼解決這個問題的)。 – 2014-09-23 02:02:32

+1

@KissKoppány數組*的長度*無法更改*(因爲它有'List '),所以它不完全清楚你正在尋找什麼。 – 2014-09-23 02:05:20

+1

你在考慮錯誤。 'public int []數字;'不分配數組。它分配一個你可以存儲數組的地方。 'numbers = new int [5];'分配一個5元素的整型數組並將其存儲在'numbers'中。 'numbers = new int [12];'分配一個(不同的)12個元素的整數數組並將其存儲在'numbers'中。由於現在沒有任何東西正在引用5元素數組,它將可用於GC。 – 2014-09-23 02:06:31

1

當然,你可以這樣做。您不能更改數組的大小。當您停止Timer時,只需創建一個新數組並將其分配給相同的變量。這是重要的變量。您將從Tick事件處理程序中的變量中獲取數組,以便始終獲取當前數組。