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) устранить вашу логическую ошибку, чтобы вы не пытались прочитать больше элементов, чем существует в массиве.

Другие вопросы по тегам