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++;

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

4

4 回答 4

2

数组是静态长度。您定义了一个长度为 0 的数组,然后尝试访问该数组中不存在的元素。您必须创建一个足够大的数组来保存您打算使用的所有值,或者使用非静态集合List<string>而不是静态大小的集合,例如string[].

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

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

Dictionary<int, string> TabMessages = new Dictionary<int, string>();
TabMessages[TotalTabs] = "";
于 2013-02-18T04:42:47.600 回答
1

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

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

于 2013-02-18T04:39:55.660 回答
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
于 2013-02-18T04:42:13.520 回答
0

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

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

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

于 2013-02-18T04:44:59.540 回答