c#中的以下数组声明之间有什么区别?

c#中的以下数组声明之间有什么区别?,c#,arrays,indexoutofrangeexception,C#,Arrays,Indexoutofrangeexception,我正在我的WinForm应用程序中构建一个菜单,我做了如下操作: MenuItem[] items = new MenuItem[] { }; 及之后: for (int namesIndex = 0; namesIndex < menuNames.Length; namesIndex++) { MenuItem item = new MenuItem(menuNames[namesIndex]); for (int entriesIndex = 0; entriesI

我正在我的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;
}
一切都像一个符咒

现在的问题是:有人知道为什么上面的数组声明有效,而另一个不有效吗?
非常感谢您的
for
循环将循环变量与
menuNames.Length
进行迭代,同时使用
数组的索引器。其中一个是错的


此外,如果要向集合中添加其他项,则几乎可以肯定的是,您应该使用
列表,而不是数组。

您的
for
循环将循环变量与
menuNames.Length
进行迭代,同时使用
数组的索引器。其中一个是错的


此外,如果要向集合添加其他项,那么几乎可以肯定的是,您应该使用
列表,而不是数组。

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

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


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

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

MenuItem[] items = new MenuItem[] { };
第一个示例声明了一个长度为零的数组,因为您没有提供任何元素。即它不能包含任何元素

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

MenuItem[] items = new MenuItem[] { };
这将创建一个包含0项的数组

MenuItem[] items = new MenuItem[] { null };
这将创建一个包含1项的数组(它为null,但仍然有效)

您可能需要根据所需的项数进行初始化(例如,
new MenuItem[menuNames.Length]
)。或者改用
newlist()
,然后调用
Add()

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

MenuItem[] items = new MenuItem[] { null };
这将创建一个包含1项的数组(它为null,但仍然有效)

您可能需要根据所需的项数进行初始化(例如,
new MenuItem[menuNames.Length]
)。或者改用
newlist()
,调用
Add()

只要
menuNames
有一个项目,一切都像一个符咒。您需要按以下方式更改代码以使其正常工作:

MenuItem[] items = new MenuItem[menuNames.Length];
在第一种情况下,您看到崩溃的原因是您创建了一个包含零项的数组,而在第二种情况下,您创建了一个包含一项的数组。如果
menuNames
有多个元素,您的代码将再次崩溃。

只有当
menuNames
只有一个项目时,“一切都像一个符咒”。您需要按以下方式更改代码以使其正常工作:

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

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

既然你不知道会有多少元素,为什么不使用say List?我不想使用List(听起来可能很傻,但在这里是这样),最近我已经使用了很多列表、字典和lambda等等。。。有了这一个,我将成为经典(告诉你这听起来很奇怪):这是使用它们的一个很好的理由,你会遇到这样的小问题,并了解我们这些人在糟糕的老年时代必须做什么既然你不知道会有多少,为什么不使用say List呢?我不想使用List(听起来可能有点傻,但现在开始了),最近我已经习惯了很多List、dictionary和lambdas等等。。。有了这一个,我将成为经典(告诉你这听起来很奇怪):这是使用它们的一个很好的理由,你会遇到这样的小问题,并了解我们这些人在糟糕的老年时代必须做什么