IndexOutOfRange на GetFiles

Я пытаюсь прочитать большое количество файлов и сохранить некоторую информацию в словаре. Мой полный код:

[HttpGet("[action]")]

public JsonResult GenerateMapFiles()
{
    Dictionary<string, List<Tuple<string, ushort>>>[] CodeMapping = new Dictionary<string, List<Tuple<string, ushort>>>[256];

    /* Pre-creating some dictionaries */
    CodeMapping[2] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[8] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[16] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[32] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[64] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[128] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[256] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);

    string[] fileList = System.IO.Directory.GetFiles("C:\\mySQL");

    /* Processing code was here, but I commented it and it is still generating exception */

    return Json(CodeMapping);
}

Линия string[] fileList = System.IO.Directory.GetFiles("C:\\mySQL"); Возникает исключение:

Exception thrown: 'System.IndexOutOfRangeException' in XXXXX.dll: 'Index was outside the bounds of the array.'

Если я прокомментирую назначения CodeMapping[X], ошибки не будет, и fileList заполняется. Я не понимаю, почему предыдущие строки влияют на эту. Может ли кто-нибудь объяснить мне, почему?

2 ответа

Решение

Хорошо, я нашел решение при отправке, это, видимо, ошибка Visual Studio, не указывающая правильную строку в режиме отладки. Моя первая строка должна была быть:

Dictionary<string, List<Tuple<string, ushort>>>[] CodeMapping = new Dictionary<string, List<Tuple<string, ushort>>>[257];

Я думаю, что вы должны создать словари в n-1 местах, так как максимальный индекс будет от 0 до 255 в случае набора из 256 элементов.

поэтому вы переписываете это как:

/* Pre-creating some dictionaries */
    CodeMapping[1] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[7] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[15] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[31] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[63] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[127] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
    CodeMapping[255] = new  Dictionary<string, List<Tuple<string, ushort>>>(256);
Другие вопросы по тегам