从数组中删除元素:转换为列表,删除元素,转换回数组?

时间:2013-04-09 07:21:07

标签: c# arrays winforms list

在我的程序中,我有一个名为Album的课程。我有一个Array我的相册对象进入创作。如果他们愿意,我需要让用户稍后更改相册的albumName。如果需要,我还需要让用户从数组中删除相册。根据我的理解,你不能只是从数组中删除对象,所以如果将它们存储在List而不是数组中会很好。

根据我对Lists的理解(我之前没有使用它们),如果我想稍后更改Album对象中的变量,我不能在创建时将Album对象放入List而不是Array。如果我想更改albumName,我也不能只删除和替换列表中新的Album对象,因为Album对象将存储一个阵列(myMusics),如果我这样做就会丢失。

所以我的问题是,如何允许用户更改Album对象,同时让他们删除它们?我想我必须将它们存储在的数组更改为List。然后从List中删除对象,然后将List列表更改回相同的Array。它是否正确?如果这是正确的方法,我该怎么做呢?

此外,如果它有帮助/有所作为,将在Form1中创建包含相册的数组,相册对象将从表单1中删除,但相册对象中的albumName更改将在Form2中发生。< / p>

非常感谢任何帮助。我很擅长使用c#,因此帮助我理解的代码示例非常棒。谢谢。

专辑类:

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];
    }
}

2 个答案:

答案 0 :(得分:0)

我建议您一直将Music存储在List<Music>中。与C# List中的其他语言不同,实际上是一个具有常量索引操作的动态可扩展数组[]

仍然要记住,这意味着从列表中删除除最后一个元素之外的任何元素将意味着移动元素的额外操作。如果你不关心我在删除相册之前建议的List中的音乐顺序,你可以将其与List中的最后一个交换,然后删除List中的最后一个元素}。

答案 1 :(得分:0)

  

根据我对列表的理解(我之前没有使用它们),我   不能将Album对象放入List而不是Array   如果我想稍后更改Album对象中的变量,则创建。

仅适用于结构。由于您使用的是(可变的),因此您可以在对象存储在List<Album>时更改对象的属性。

所以你肯定应该使用List

除非您希望能够按某些字段查找相册,例如AlbumName。如果是这样,您可以使用Dictionary<string, Album>并使用AlbumName作为密钥。