索引数组 - 超出范围

时间:2013-01-16 02:37:45

标签: c# arrays outofrangeexception

我正在遍历字符串列表(storedProcedures)并将每个列表项拆分为数组。我想使用特定索引访问数组元素。一旦我尝试访问数组的第二个元素,我就会超出范围异常。

string[] myArray = new string[4];
foreach (string procedure in storedProcedures)
{
    myArray = procedure.Split(',');

    foreach (string index in myArray)
    {
        Console.WriteLine(index);
    }

    for (int i = 0; i < myArray.Length; i++)
    {
        Console.WriteLine(myArray[i]);
    }

    Console.WriteLine(myArray[0]);
    Console.WriteLine(myArray[1]);  <---- out of range exception here
    Console.WriteLine(myArray[2]);
    Console.WriteLine(myArray[3]);
}

使用'foreach'和'for'循环访问数组并打印其内容工作正常,所以我不确定为什么通过直接指定索引来访问数组不起作用?

3 个答案:

答案 0 :(得分:3)

这没用:

string[] myArray = new string[4];

因为这会抛弃你的阵列:

myArray = procedure.Split(',');

您的问题是其中一个storedProcedures没有逗号。

答案 1 :(得分:1)

Console.WriteLine(myArray.Length)显示什么?你以4的大小开始数组,但procedure.Split(',')为你提供了一个新的数组,其中只有一个元素。

答案 2 :(得分:1)

您的拆分阵列可能比预期的要短。在从数组中检索值之前,应始终检查长度。也许有些逗号丢失了,也许你的字符串没有正确格式化...调试它更好,如下:

foreach (String procedure in storedProcedures)
{
    Console.WriteLine("Current Procedure: \"" + procedure + "\"");

    String[] split = procedure.Split(',');

    Console.WriteLine("Split Length: " + split.Length.ToString());

    for (int i = 0; i < myArray.Length; i++)
        Console.WriteLine(i.ToString() + ") " + split[i]);
}