0

以下のプログラミングを行いました。アプリケーションを実行すると、次のエラー メッセージが表示されます: インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。

編集:

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

手伝っていただけませんか?前もって感謝します。

敬具。

4

2 に答える 2

0

エラー メッセージを見ると、実際に何が起こっているかが正確にわかります (その言語を話せる必要があるだけです)。「Index was out of range」は、N 個のアイテムを持っていて、(N + 1) 個のアイテムを取得しようとしたことを意味します。言い換えると、存在しないものを取得しようとしている可能性があります。これは、おそらくプログラムのロジックに問題があるためですが、N+1 個のアイテムがあることを期待しているのに、そうでない可能性もあります。

これをキャッチする最善の方法は、デバッガーを使用して、例外が発生している行を最初に見つけることです。ForEach ( Verknüpfung.AddRange) の最初の行にブレークポイントを配置すると、デバッグが開始されます。

排除するには、(1) 入力ファイルを修正するか、(2) 論理エラーを解決して、配列に存在するよりも多くのアイテムを読み取ろうとしないようにする必要があります。

于 2014-01-19T13:49:06.150 に答える
0

行を見てください:

Verknüpfung.AddRange(File.ReadAllLines(Datei, Encoding.UTF8));

Shortcut.Click += delegate { Process.Start(Verknüpfung[1 + i]); };

Verknüpfung[1 + i] は、リスト内の項目数よりも 1 つ大きくなります。

リストが作成されるよりも速くインクリメントしているようです。

変更してみる

Shortcut.Click += delegate { Process.Start(Verknüpfung[1 + i]); };

Shortcut.Click += delegate { Process.Start(Verknüpfung[0 + i]); };
于 2014-01-19T13:54:25.680 に答える