C#: индекс был вне диапазона, должен быть неотрицательным и меньше размера коллекции
Я сделал следующее программирование. При запуске приложения отображается сообщение об ошибке: индекс вышел за пределы допустимого диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции.
РЕДАКТИРОВАТЬ:
public void SetShortcuts()
{
List<string> Verknüpfung = new List<string>();
int i = 0;
int j = 0;
try
{
foreach (string Datei in Directory.GetFiles(PfadShortcuts, "*.txt"))
{
Verknüpfung.AddRange(File.ReadAllLines(Datei, Encoding.UTF8));
Image ShortcutIcon = new Image();
ShortcutIcon.Source = new BitmapImage(new Uri(@"Fugue Icons\document.png", UriKind.Relative));
ShortcutIcon.Height = 16;
ShortcutIcon.Width = 16;
ShortcutIcon.Stretch = Stretch.None;
MenuItem Shortcut = new MenuItem();
Shortcut.Icon = ShortcutIcon;
Shortcut.Header = Verknüpfung[0 + i];
Shortcut.Padding = new Thickness(5);
Shortcut.Click += delegate { Process.Start(Verknüpfung[0 + j]); };
Shortcuts.Items.Add(Shortcut);
i += 2;
j++;
}
}
catch
{
Fehlermeldung_Main_Shortcuts();
}
}
Не могли бы вы мне помочь? Заранее спасибо.
С уважением.
2 ответа
Посмотрите на строки:
Verknüpfung.AddRange(File.ReadAllLines(Datei, Encoding.UTF8));
а также
Shortcut.Click += delegate { Process.Start(Verknüpfung[1 + i]); };
Verknüpfung[1 + i] на единицу больше, чем количество элементов в списке.
Я, кажется, увеличивается быстрее, чем список заполнен.
Попробуйте изменить
Shortcut.Click += delegate { Process.Start(Verknüpfung[1 + i]); };
в
Shortcut.Click += delegate { Process.Start(Verknüpfung[0 + i]); };
Если вы посмотрите на сообщение об ошибке, оно на самом деле точно скажет, что происходит (вам просто нужно уметь говорить на языке). "Индекс был вне диапазона" означает, что у вас было N предметов, и вы пытались взять (N + 1) предмет. Другими словами, вы пытаетесь получить что-то, чего не существует, возможно, из-за неисправной логики в вашей программе, но также может быть, что вы ожидаете иметь N + 1 элементов, но не можете.
Лучший способ понять это - использовать отладчик, чтобы сначала выяснить, по какой строке вы получаете исключение. Размещение точки останова на первой строке в вашем ForEach (Verknüpfung.AddRange
) приведет вас к его отладке.
Для устранения вам необходимо (1) исправить ваши входные файлы ИЛИ (2) устранить вашу логическую ошибку, чтобы вы не пытались прочитать больше элементов, чем существует в массиве.