将数据添加到数组中时索引数组的边界

时间:2013-02-18 04:37:47

标签: c# arrays

所以我有一些代码可以将一些数据存储在一个数组中。当新数据进入时,它被放入一个新的数组项(数组项的总数)中,然后添加的数组项总数已经为下一位数据添加了。但是当我尝试将数据添加到数组中时,无论是数组[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++;

任何帮助,这真的很烦我,因为当我试图创建一个新的数组条目时,它会抛出关于索引超出数组范围的错误...

4 个答案:

答案 0 :(得分:1)

C#中的数组不是动态的 - 它们是固定大小的。尝试使用某个列表List<string>并使用Add方法在其中插入新条目。

TabMessages是一个包含0个元素的数组(这就是你声明它的方式)。因此,您将无法在其上添加(或设置)任何元素 - 您每次都会获得一个超出范围的索引。

答案 1 :(得分: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

答案 2 :(得分:1)

数组是一个静态长度。您已经定义了一个长度为0的数组,然后尝试访问数组中不存在的元素。您必须创建足够大的数组来容纳您打算使用的所有值,或者使用非List<string>之类的非静态集合,而不是像string[]这样的静态集合。

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

如果您想要通过索引访问但不想提供所有可能值的内容,请使用字典:

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

答案 3 :(得分:0)

数组被定义为具有固定大小。声明string[] TabMessages = {}string[0] Tabmessages;

相同

您可以调整数组的大小(但我认为这是一个中等昂贵的过程) - 请参阅http://www.dotnetperls.com/array-resize

或者(并且最好),尝试使用某种类型的List构造