2013-04-09 98 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中的最后一个元素。