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