关于c#:哪个声明最好用,Collection还是IEnumerable?

Which declaration is best to use, Collection or IEnumerable?

本问题已经有最佳答案,请猛点这里访问。

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

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

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


在这种情况下,IEnumerable obj = new Collection()完全没有意义,因为您有一个空集合,不能向其中添加项(因为IEnumerable不允许这样做)。这有什么用?

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

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

如果对象暴露于外部代码(例如通过属性或通过方法返回),则应根据类的公共接口选择最有意义的类型。这意味着作为经验法则,您应该使用尽可能不专门化的类型,并且总是喜欢使用接口。

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


这完全取决于需求。如果使用DAL进行延迟或返回数据库对象,则最好使用IEnumerable。

声明为集合将提供更多要添加的功能。你可以在那里得到更多的想法。


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

请记住,Collection表示IList, ICollection, IEnumerable, IList, ICollection, IEnumerable

正如Jon已经指出的那样,您给出的示例没有任何意义,因为您正在创建一个不能添加到其中的空集合,但给出了一个不同的示例,特定性级别开始发挥作用。

集合具有一组特定的成员,如果需要这些成员,请使用它。如果您希望对集合中的数据不那么具体,可以将其强制转换为由Collection实现的任何接口。问题是,如果创建一个Collection,为什么要这样做?


我个人比较喜欢

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

这甚至可以成功地编译到.NET 2.0和VS.NET 2008及更高版本。

var文件。