2009-06-30 121 views
0

我创建了一个类,它是这样的:类Array用[]和IEnumerable

public class MovieTheaterList 
    { 
     public DateTime Date { get; private set; } 
     public int NumTheaters { get; private set; } 
     public Theater[] Theaters { get; private set; } 
    } 

    public class Theater 
    { 
     public string Name; 
    } 

我希望能够将项目添加到MovieTheaterList类的电影院阵列,但是当我尝试访问它它显示为IEnumerable类型,并且没有Add()方法?

我习惯在C/C++的结构和类中使用数组,但是如何在.NET 3.5中向数组添加新项?

+1

数组在C#中是固定大小的,每个槽都是可变的。这可能不是你想要的,所以不要使用数组,请使用其他集合类。一些想法:http://blogs.msdn.com/ericlippert/archive/2008/09/22/arrays-considered-somewhat-harmful.aspx – 2009-07-01 01:17:00

回答

4

将影院公开为IList,而不是阵列,您可以从中添加/删除项目。 例如

public class MovieTheaterList 
{ 
    // don't forget to initialize the list backing your property 
    private List<Theater> _theaterList = new List<Theater>(); 

    public DateTime Date { get; private set; } 
    public int NumTheaters { get; private set; } 

    // set is unnecessary, since you'll just be adding to/removing from the list, rather than replacing it entirely 
    public IList<Theater> Theaters { get { return _theaterList; } } 
} 
+0

@Jeremy,是否有一个原因,你返回一个“IList <>”而不是“List <>”。 – vobject 2009-06-30 23:39:05

+1

pZy - http://stackoverflow.com/questions/400135/c-listt-or-ilistt/400144 – 2009-07-01 00:01:15

1

使用

List<Theater> Theaters { get; private set; } 

代替剧院的阵列。您可以使用它初始化它

Theaters = new List<Theater>(); 

在C#中使用列表通常优先于使用数组。您可以使用ToArray()轻松地将数组转换为数组,但这样您不必担心在创建时正确调整数组的大小,或者更重要的是,在执行期间调整大小。

2

如何通过MovieTheatreClass扩展通用列表来实现此功能。

public class MovieTheatreList : List<Theatre> 
{ 
    public DateTime Date { get; private set; } 
} 

public class Theatre 
{ 
    public string Name; 
} 

这样,你得到所有的内置列表的东西(如计数,而不必单独NumOfTheatres属性来保持)。