簡體   English   中英

以下c#中的數組聲明之間有什么區別?

[英]What is the difference between the following array declarations in c#?

我正在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 };

一切都像魅力。

現在的問題是: 有人知道上面的數組聲明為什么起作用,而另一個不起作用嗎? 非常感謝

您正在使用數組初始化程序構造數組,因此數組的長度將由您提供的數據給出。

第一個示例聲明一個長度為零的數組,因為您未提供任何元素。 即它不能包含任何元素。

第二個示例聲明一個長度為1的數組。

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

這將創建一個包含0個項目的數組。

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

這將創建一個包含1個項目的數組(它為null,但仍然有效)。

您可能想要初始化所需的項數(例如, new MenuItem[menuNames.Length] )。 或者使用new List<MenuItem>() ,然后調用Add()

僅在menuNames僅包含一項的情況下,“所有內容都像一種魅力”。 您需要按以下步驟更改代碼以使其起作用:

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

在第一種情況下看到崩潰的原因是,您創建了一個零項的數組,而在第二種情況下,您創建了一個項的數組。 如果menuNames具有多個元素,則您的代碼將再次開始崩潰。

您的for循環迭代時,將循環變量與menuNames.Length進行比較,而您使用items數組的索引器。 兩者之一是錯誤的。

另外,如果要向集合中添加其他項,則幾乎可以肯定使用List而不是數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM