【问题标题】:c# How to create a dynamic list/arrayc#如何创建一个动态列表/数组
【发布时间】:2017-02-06 13:24:11
【问题描述】:

其实我有这个:

public ArrayList _albumId;
public ArrayList _albumName;
public ArrayList _nbPhotos;

当我有一张新专辑时,我会在每个 ArrayList 上添加一行。 你知道只用一个列表或数组来做些什么吗? 谢谢

【问题讨论】:

  • 您最好使用通用的List 而不是ArrayListList 具有类型安全性。
  • 创建一个包含三个字段和一个列表的班级相册
  • 您不应该将 Album 变成具有这些属性的类,然后您就可以拥有 List 吗?
  • 每次 C# 开发人员使用 ArrayList 时,都会有一只小狗死去。
  • Nono 的答案提到了它,但你的班级肯定会受益于 ToString 覆盖。

标签: c# .net arrays list


【解决方案1】:

首先,不要使用ArrayList - 使用通用List<T>

第二 - 不是为专辑的每个属性创建单独的列表,而是创建具有所有必需属性的 Album 类,并将专辑保存在 List<Album> 中:

public class Album
{
   public int Id { get; set; }
   public string Name {get; set; }
   public int CountOfPhotos {get; set; }
}

添加新专辑:

_albums.Add(new Album { Id = 2, Name = "Foo", CountOfPhotos = 42 });

专辑列表声明为

List<Album> _albums = new List<Album>();

【讨论】:

    【解决方案2】:

    为什么要将同一事物的信息分成多个数组?

    创建一个Album 对象。比如:

    public class Album
    {
        public int ID { get; set; }
        public string Name { get; set; }
        // other properties, etc.
    }
    

    还有一个专辑列表

    var albums = new List<Album>();
    

    添加新专辑时,添加新专辑:

    var newAlbum = new Album
    {
        ID = someValue,
        Name = anotherValue
    }
    albums.Add(newAlbum);
    

    将有关对象的信息封装在该对象中,而不是散布在其他不相关的变量中。


    作为一个类比,考虑将汽车停在停车场的行为。有了物体的集合,停车场就有了空间的集合,每辆车进入一个空间。相反,使用单独的值数组,停车的过程是:

    1. 把车拆开。
    2. 将轮胎放在轮胎空间,窗户放在窗户空间,门放在门空间等。
    3. 当您想要取回汽车时,请前往所有空间并找到您的零件。 (希望您找到合适的。)
    4. 重建汽车。

    对封装的对象进行建模更有意义。

    【讨论】:

      【解决方案3】:

      使用通用列表。

      为 smaple 定义一个类:

      public class Album
      {
         public int Id { get; set; }
         public string Name { get; set; }
         public string[] AlbumPhotos { get; set; }
      }
      

      并在通用列表中使用它:

      var albums = new List<Album>();
      
      albums.Add(new Album() { Id = 1, Name = "Ramones" };
      albums.Add(new Album() { Id = 2, Name = "Leave Home" };
      albums.Add(new Album() { Id = 3, Name = "Rocket To Russia" };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        相关资源
        最近更新 更多