2013-04-09 105 views
1

在我的課程中,我有一個名爲Album的課程。我有一個數組我的相冊對象進入創建。如果他們想要,我需要讓用戶稍後更改專輯的albumName。如果需要,我還需要讓用戶從陣列中刪除相冊。據我所知,你不能只從數組中刪除對象,所以如果它們存儲在一個列表中,而不是一個數組中,那將會很好。從數組中刪除元素:轉換爲列表,刪除元素,轉換回數組?

根據我對列表的理解(我之前沒有使用它們),如果我想稍後更改Album對象中的變量,則無法將Album對象放入List中而不是創建Array 。因爲Album對象將存儲Array(myMusics),所以如果我這樣做的話,我也不能僅僅刪除並替換List中的一個新的Album對象。

所以我的問題是,我如何讓用戶更改相冊對象,同時讓他們刪除它們?我想我必須將它們存儲的數組更改爲列表。然後刪除列表中的對象,然後將列表更改回相同的數組。它是否正確?如果這是正確的方法,我該如何做到這一點?

此外,如果它有助於/有所作爲,包含相冊的數組將在Form1中創建,相冊對象將從表單1中刪除,但Album相冊中的albumName更改將發生在Form2中。

任何幫助,非常感謝。我對使用C#很新,所以幫助我理解的代碼示例將會非常棒。謝謝。

Album類:

public class Album 
{ 
    public string albumName; 
    private int totalMusics; 
    private const int MAX_MUSICS = 100; 
    private Music[] myMusics; 

    public Album(string albumName) 
    { 
     this.albumName = albumName; 
     totalMusics = 0; 
     myMusics = new Music[MAX_MUSICS]; 
    } 
} 
+0

只需使用'列表'而不是陣列 – 2013-04-09 07:23:16

+1

如果專輯在列表中,您可以更改相冊的名稱。所以只需使用一個List。 – 2013-04-09 07:23:25

+0

'Array.FindAll'是你的朋友。 – leppie 2013-04-09 07:40:22

回答

0

From what I understand of Lists (I haven't used them before this), I can't put the Album objects into a List instead of an Array on creation if I want to change a variable in the Album object later.

這僅僅是結構如此。由於您正在使用(可變),因此您可以在存儲在List<Album>中時更改這些對象的屬性。

所以你肯定應該使用List

除非您希望能夠通過某個字段查找相冊,例如通過AlbumName。如果是這樣,您可以使用Dictionary<string, Album>並使用AlbumName作爲密鑰。

+0

感謝您的回覆。我收到錯誤: 'MusicCollection.Form1。「AlbumList」不能像方法一樣使用,使用以下代碼行: formMain.AlbumList(formMain.AlbumsListBox.SelectedItem).albumName = NameTextBox.Text; (formMain是如何在Form2中引用Form1)我做錯了什麼改變了Album的albumName? – user2251281 2013-04-09 08:07:42

+0

像這樣在Form1的最開始處聲明AlbumList:public List AlbumList; – user2251281 2013-04-09 08:09:24

+1

您必須使用索引運算符'[]',而不是函數調用'()',如下所示:'formMain.AlbumList [formMain.AlbumsListBox.SelectedItem] .albumName = ...' – 2013-04-09 08:25:38

0

我建議你存儲在Music所有List<Music>一起。與C#List中的其他語言不同,它實際上是一個具有恆定索引操作[]的動態可擴展陣列。

請記住,這意味着從列表中刪除除最後一個以外的任何元素將意味着需要額外的操作來移動元素。如果您不關心List中的音樂順序,我建議在刪除相冊之前將其與List中的最後一個進行交換,然後刪除List中的最後一個元素。