我在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 };
一切都像魅力一样。
现在的问题是:有没有人知道为什么上面的数组声明有效,而另一个没有? 非常感谢
答案 0 :(得分:3)
您正在使用数组初始值设定项来构造数组,因此数组的长度将由您提供的数据给出。
第一个示例声明一个长度为零的数组,因为您没有提供任何元素。即它不能包含任何元素。
第二个示例声明了一个长度为1的数组。
答案 1 :(得分:2)
MenuItem[] items = new MenuItem[] { };
这将创建一个包含0个项目的数组。
MenuItem[] items = new MenuItem[] { null };
这会创建一个包含1个项目的数组(它为空,但仍然有效)。
您可能希望初始化所需的项目数(例如new MenuItem[menuNames.Length]
)。或者改为使用new List<MenuItem>()
,并致电Add()
。
答案 2 :(得分:2)
&#34;一切都像一个魅力&#34;仅在menuNames
只有一个项目的范围内。您需要按如下所示更改代码才能使其正常工作:
MenuItem[] items = new MenuItem[menuNames.Length];
您在第一种情况下看到崩溃的原因是您创建了一个零项目的数组,而在第二种情况下,您创建了一个包含一个项目的数组。如果menuNames
包含多个元素,则代码将再次开始崩溃。
答案 3 :(得分:0)
当你使用for
数组的索引器时,你的menuNames.Length
循环遍历将循环变量与items
进行比较。其中一个是错误的。
此外,如果您想要将其他项添加到集合中,那么您几乎肯定会使用List
,而不是数组。