数组索引超出范围

Posted

技术标签:

【中文标题】数组索引超出范围【英文标题】:Array Index Is Out of Bounds 【发布时间】:2014-08-12 16:48:11 【问题描述】:

我有这种方法可以根据其中的内容检查一行。我还有一个静态字符串数组,它初始化时没有任何内容。我遇到了一个超出范围的索引错误,这对我来说没有任何意义,因为我没有数组的最大长度。

这是我的方法:

private void PrintTable(DataTable table)
 
    foreach (DataRow row in table.Rows)
    
        litCanCount.Text = "Canoe count is: ";
        litKayCount.Text = "Kayak count is: ";

        string currRow = row["CraftType"].ToString();
        if (currRow == CANOE)
        
            Response.Write("CANOE INCREMENT!<br />");
            CANOEi++;
            txtCanCount.Text = CANOEi.ToString();
            arr[i] = currRow;
            i++;
        
        if (currRow == KAYAK)
        
            Response.Write("KAYAK INCREMENT!<br />");
            KAYAKi++;
            txtKayCount.Text = KAYAKi.ToString();
            arr[i] = currRow;
            i++;
        
        for (int a = 0; arr.Length > a; a++)
        
            Response.Write(arr[a] + "<br />");
        
    

这是我的类中最重要的部分,带有我的静态变量:

public partial class Index: System.Web.UI.Page

    string CANOE = "Canoe";
    string KAYAK = "Kayak";
    int CANOEi;
    int KAYAKi;
    string[] arr = new string[]  ;
    int i = 0;

【问题讨论】:

arr 的长度为 0.... 一个名为i的全局变量?我喜欢它.... 你得到了例外...... @user3267755 I initialized the array to be any size of strings。你这么认为。您所做的是创建一个大小为零的数组。所以你不能访问 arr[0] (它需要一个最小长度 1)。测试一下。 var arr2 = new string[] ; arr2[0] = ""; 您最好使用 List 而不是可以添加到其中的数组,而不是使用固定大小的数组 【参考方案1】:

我认为您不需要该代码。如果您只想显示独木舟和皮划艇的数量,您可以使用基本调用 Select

    DataRow[] canoe = table.Select("CraftType = 'Canoe'");
    DataRow[] kayak = table.Select("CraftType = 'Kayak'");

    litCanCount.Text = "Canoe count is: " + canoe.Length;
    litKayCount.Text = "Kayak count is: " + kayak.Length;

如果您仔细想想,数据表只是一个复杂的数组,框架提供了许多处理数据表的方法。

例如,在 LINQ 中

int canoeNumber = table.AsEnumerable().Count(x => x["CraftType"].ToString() == "Canoe");

【讨论】:

您看到了我之前的尝试,并为我提供了一个更简单和最佳的解决方案,谢谢!【参考方案2】:

数组必须指定长度

长度为零的数组(运行时异常)

static void Main()

    string[] arr = new string[]  ; //Array with no length
    arr[0] = "hi"; //Runtime exception

一个长度的数组(无例外)

static void Main()

    string[] arr = new string[1]; //Array with one length, index starts at zero
    arr[0] = "test";

如果您想使用集合而不定义大小,请考虑使用列表

列表集合(无需长度定义)

   List<string> listString = new List<string>();
   listString.Add("hi");
   listString.Add("bye");
   listString.Add("oh hai");

【讨论】:

第一个示例编译。为什么不呢? (你会得到一个运行时异常,但这并不排除编译。) @PaulBinder:为什么那里有“无效”评论?那行特定的代码没有任何问题(除了奇怪之外)。即使是这样,它也不会很有帮助。它读作“出了点问题”——帮助不大,是吗?我会完全删除它。

以上是关于数组索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章

Swift 致命错误:数组索引超出范围

如果数组索引超出范围,则尝试抛出范围错误(C++)

数组索引超出范围?如何?

从firebase删除时数组索引超出范围

获取“索引超出数组范围”异常

尽管表大于索引,但表索引超出范围