1

我正在我的 WinForm 应用程序中构建一个菜单,我正在做类似的事情:

MenuItem[] items = new MenuItem[] { };

之后 :

for (int namesIndex = 0; namesIndex < menuNames.Length; namesIndex++)
{
    MenuItem item = new MenuItem(menuNames[namesIndex]);

    for (int entriesIndex = 0; entriesIndex < menuEntries.GetLength(1); entriesIndex++)
    {
       item.MenuItems.Add(menuEntries[namesIndex, entriesIndex]);
    }

    items[namesIndex] = item;
}

并抛出 IndeOutOfRangeException :

在此处输入图像描述

在这个烦人的异常之后,我修改了数组声明:

 MenuItem[] items = new MenuItem[] { null };

一切都像魅力一样。

现在的问题是:有没有人知道为什么上面的数组声明有效,而另一个不知道? 非常感谢

4

4 回答 4

3

您正在使用数组初始值设定项来构造数组,因此数组的长度将由您提供的数据给出。

第一个示例声明了一个长度为零的数组,因为您不提供任何元素。即它不能包含任何元素。

第二个例子声明了一个长度为 1 的数组。

于 2014-05-05T17:37:59.003 回答
2
MenuItem[] items = new MenuItem[] { };

这将创建一个包含 0 个项目的数组。

MenuItem[] items = new MenuItem[] { null };

这将创建一个包含 1 个项目的数组(它为空,但仍然很重要)。

您可能想要初始化所需的项目数(new MenuItem[menuNames.Length]例如)。或者new List<MenuItem>()改用,然后调用Add().

于 2014-05-05T17:38:09.150 回答
2

“一切都像魅力”只有在menuNames只有一个项目的情况下。您需要按如下方式更改代码以使其工作:

MenuItem[] items = new MenuItem[menuNames.Length];

您在第一种情况下看到崩溃的原因是您创建了一个包含零项的数组,而在第二种情况下您创建了一个包含一个项的数组。如果menuNames有多个元素,您的代码将再次开始崩溃。

于 2014-05-05T17:38:34.793 回答
0

您的for循环迭代将循环变量与 进行比较menuNames.Length,同时使用items数组的索引器。两者之一是错误的。

此外,如果您想向集合中添加其他项目,那么您几乎可以肯定使用的是 a List,而不是数组。

于 2014-05-05T17:37:18.587 回答