Почему это вызывает исключение «Индекс вне диапазона»? - PullRequest
1 голос
/ 22 января 2012
    public void button2_Click(object sender, EventArgs e)

    {
        char[] delimiters = { ',', '\r', '\n', ' ' };
        string[] content = File.ReadAllText(CSV_File).Split(delimiters);

        int bounds = (content.GetUpperBound(0)); //bounds of this content string is 96
        int i = 1;
        id = new string[(bounds / 4)]; //for example index size = 96 / 4 = 24

        for (i = 0; i <= (bounds / 4); i++)
        {
            int rows = (i * 4); // gets every 4th value
            id[i] = content[rows]; //inserts row 96 into id 24 - fails here
        }
    }

Застрял на это сейчас.Точная ошибка: «Индекс находился за пределами массива».Однако я не знаю, к какому индексу это относится.

Ответы [ 5 ]

3 голосов
/ 22 января 2012

Измените <= на < в цикле for.

1 голос
/ 22 января 2012

Похоже, вы случайно написали <= вместо <. Помните, что индексы массива увеличиваются до длины - 1. </p>

Я мог бы порекомендовать немного почистить код. Это много лишних скобок и переменных ...

var delimeters = new[] { ',', '\r', '\n', ' ' };
var content = File.ReadAllText(CSV_File).Split(delimeters);

id = content.Where((n, i) => i % 4 == 0).ToArray();
1 голос
/ 22 января 2012

Для лучшей практики кодирования было бы лучше проверить id.Length в цикле for вместо проверки bounds / 4.

С учетом вышесказанного, я считаю, что вы должны использовать < вместо <= в вашем условном выражении в цикле for.

1 голос
/ 22 января 2012

Это зависит от содержимого файла, который вы на самом деле читаете. Код кажется нормальным.

0 голосов
/ 22 января 2012

Я полагаю, что на последней итерации вы получите исключение, потому что на последней итерации вы обращаетесь к индексу (bounds / 4), но допустимый диапазон индексов составляет от 0 до (bounds / 4 ) - 1. По сути, вы проходите один конец вашего массива id. Вам нужно изменить <= на < в вашем состоянии цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...