最好使用哪种声明,Collection或IEnumerable?

时间:2012-04-09 11:12:25

标签: c# c#-4.0 c#-3.0

我可以用两种方式编写代码来实现我的目标,但是想知道哪一个是最佳实践?

Collection<MyClass> obj = new Collection<MyClass>();

IEnumerable<MyClass> obj = new Collection<MyClass>();

4 个答案:

答案 0 :(得分:5)

在这种情况下,IEnumerable<MyClass> obj = new Collection<MyClass>()毫无意义,因为你有一个空集合,你无法添加项目(因为IEnumerable不允许它)。这有用吗?

除此之外,如果我们讨论的是局部变量没有暴露于方法之外的代码,那么唯一重要的是方便和清晰。你可以使用第一种形式的等价物来最大化这两种形式:

var obj = new Collection<MyClass>();

如果对象 暴露给外部代码(例如通过属性,或者它是由方法返回),那么你应该选择在你的类的公共接口给出最佳意义的类型。这意味着,根据经验,您应该使用可能最不专业的类型,并且总是更喜欢接口

因此,如果您公开obj,那么如果您的代码用户不想修改该集合,则应使用IEnumerable。否则你应该使用ICollection,如果可以的话;如果仍然不够IList

答案 1 :(得分:0)

就个人而言,我更喜欢

var obj = new Collection<MyClass>();

使用VS.NET 2008及更高版本,甚至可以成功编译到.NET 2.0。

请参阅documentation for var

答案 2 :(得分:0)

我个人认为这取决于你想要达到的特异性水平。

请注意Collection<T>恭维IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

正如Jon已经指出的那样,你给出的例子没有任何意义,因为你创建了一个你无法添加的空集合,但是给出了一个不同的例子,特异性水平发挥作用。

Collection有一组特定的成员,如果需要这些成员,请使用它。如果您想对集合中的数据不太具体,可以转换为Collectioin所指示的任何接口。问题是,如果你要创建一个Collection<T>,你为什么要这样做。

答案 3 :(得分:0)

完全取决于要求。 处理DAL或返回数据库对象时,最好使用IEnumerable。

声明为Collection将提供更多添加功能。 You can get more idea on there.