【问题标题】:Index out bounds of array when adding data into an array将数据添加到数组时索引数组的边界
【发布时间】:2013-02-18 04:37:46
【问题描述】:

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

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

【问题讨论】:

  • 数组需要分配所需的大小。如果你想要一个动态数组试试List

标签: c# arrays


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 完美运行。谢谢,也感谢所有回复帮助的人:)
    【解决方案3】:

    这段代码:

    string[] TabMessages = { };
    

    相当于:

    string[] TabMessages = new string[0];
    

    这意味着您创建了大小为 0 的数组。这就是您遇到这种异常的原因。所以你可以使用List&lt;string&gt; 来代替动态大小:

    var TabMessages = new List<string>();
    

    然后就可以添加第一项了:

    TabMessages.Add(string.Empty);
    

    或者,根据您的业务规则创建具有固定大小的字符串数组:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        • 1970-01-01
        • 2017-03-24
        • 2019-01-14
        • 2018-04-17
        相关资源
        最近更新 更多