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);