【问题标题】:C#: Index was out of range, must be non-negative and less than the size of the collectionC#:索引超出范围,必须为非负数且小于集合的大小
【发布时间】:2014-01-19 13:41:25
【问题描述】:

我做了以下编程。运行应用程序显示错误消息:索引超出范围。必须是非负数且小于集合的大小。

编辑:

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

你能帮帮我吗? 提前致谢。

亲切的问候。

【问题讨论】:

  • 你没有在任何地方检查我
  • 谢谢。但为什么我需要这样做?在哪里?
  • 不知道,因为你做错了,所以没有费心阅读你的代码。
  • @Shai 告诉某人他们做错了几乎和发布一个问题“它坏了,修复它”一样有用。当你甚至没有正确阅读它时,你怎么能说这一切都是错误的?如果一切都错了,那为什么不提供建议,让他学会解决问题并学会正确地做这一切呢?

标签: c# list collections click file.readalllines


【解决方案1】:

看线:

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

【讨论】:

  • Verknüpfung.Count() 是 14。这是我想要处理的行数。 Verknüpfung[1 + i] 必须从“2”行开始,然后获取 2 行的内容。我该如何解决?
  • 除非我误解 Verknüpfung 是一个新的空列表。它没有第 2 行可以开始。 Verknüpfung[1 + i] 是从 0 开始的数组编号。
  • 好吧,“Shortcut.Header = Verknüpfung[0 + i];”作品。它将标题设置为创建的菜单。我想要做的是将点击事件设置为每隔一行。第0行:你好;第1行:运行网站;第2行:世界;第3行:运行网站; ...
  • 在第一个循环中 i = 0 所以当你执行“Shortcut.Header = Verknüpfung[0 + i];”时0 + i 仍然是 0 可以工作。如果您在 Verknüpfung 上放置手表并在程序中断时检查它,您可以检查项目中有多少个数组。
  • 异常告诉我,我的列表中有 14 个元素。这是正确的元素数量。
【解决方案2】:

如果您查看错误消息,它实际上会准确地告诉您正在发生的事情(您只需要能够说该语言)。 “索引超出范围”意味着您有 N 个项目,并且您尝试获取 (N + 1) 个项目。换句话说,您正在尝试获取不存在的东西,这可能是由于您的程序中的逻辑错误,但也可能是您希望拥有 N+1 项,但没有。

捕捉这个问题的最好方法是使用调试器首先找出你在哪一行得到了异常。在 ForEach (Verknüpfung.AddRange) 的第一行放置一个断点将让您调试它。

要消除,您需要 (1)修复您的输入文件或 (2) 解决你的逻辑错误 所以你不会试图读取比数组中存在的更多的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2019-08-28
    相关资源
    最近更新 更多