2013-02-18 37 views
0

所以我有一些代碼將一些數據存儲在數組中。當新數據進入時,它被放入一個新的數組項(數組項的總數)中,那麼數組項的總數量就已經爲下一個數據位準備好了。但是當我嘗試向數組中添加數據時,無論是數組[0]還是其他數組索引越界?當向數組中添加數據時指出數組的邊界

聲明:

string[] TabMessages = { }; 
int TotalTabs = 0; 

使用它:

DevComponents.DotNetBar.TabItem Tab = TabStrip.CreateTab(TabName); 
Tab.Tooltip = id + "|" + TabIndex; 
TabMessages[TotalTabs] = "";//index out of bounds of array 
TabStrip.SelectedTab = Tab; 
TotalTabs++; 

任何幫助,這是真的討厭我,因爲它是亂扔的指數爲出數組的邊界,當我的錯誤試圖創建一個新的條目陣列...

+0

數組需要按照所需的大小進行分配。如果你想要一個動態數組,試試'List' – tGilani 2013-02-18 04:41:22

回答

1

C#中的數組不是動態的 - 它們是固定的大小。嘗試使用列表List<string>並使用Add方法向其中插入新條目。

TabMessages是一個0元素數組(這是你如何聲明它)。因此,您將無法在其上添加(或設置)任何元素 - 每次您都會收到索引超出範圍的例外。

+0

完美工作。謝謝,還要感謝所有其他人回覆幫助:) – user1763295 2013-02-18 04:42:56

1

此代碼:

string[] TabMessages = { }; 

等同於:

string[] TabMessages = new string[0]; 

這意味着你創建的數組。這就是爲什麼你得到它的大小爲0,這種異常。所以,你可以使用List<string>以代替動態大小:

var TabMessages = new List<string>(); 

那麼你可以添加的第一個項目:

TabMessages.Add(string.Empty); 

,或根據業務規則創建固定大小的字符串數組:

string[] TabMessages = new string[5]; // create string array with 5 elements 
1

數組是一個靜態長度。您已經定義了0長度的數組,然後嘗試訪問數組中不存在的元素。要麼你必須創建一個足夠大的數組來保存你打算使用的所有值,或者使用非靜態集合,如List<string>,而不是像靜態大小的string[]

List<string> TabMessages = new List<string>(); 
TabMessages.Add(""); 

如果你想要的東西,你可以通過索引來訪問,但不希望提供所有可能的值,使用字典:

Dictionary<int, string> TabMessages = new Dictionary<int, string>(); 
TabMessages[TotalTabs] = ""; 
0

陣列的被定義爲具有固定的大小。聲明string[] TabMessages = {}相同string[0] Tabmessages;

您可以調整大小的數組(但我認爲這是一個適度昂貴的過程) - 見http://www.dotnetperls.com/array-resize

或者(最好),請嘗試使用某種類型的列表構造