0

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

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

或者

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

4 回答 4

5

在这种情况下,IEnumerable<MyClass> obj = new Collection<MyClass>()根本没有任何意义,因为您有一个无法添加项目的空集合(因为IEnumerable不允许这样做)。这有什么用?

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

var obj = new Collection<MyClass>();

如果对象暴露给外部代码(例如,通过属性,或者如果它由方法返回),那么您应该选择对给定类的公共接口最有意义的类型。这意味着,根据经验,您应该尽可能使用最少专业化的类型,并且始终首选接口

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

于 2012-04-09T11:15:47.403 回答
0

就个人而言,我更喜欢

var obj = new Collection<MyClass>();

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

参阅var.

于 2012-04-09T11:13:39.147 回答
0

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

谨记Collection<T>暗示IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

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

Collection 有一组特定的成员,如果需要这些成员,请使用它。如果您想对集合中的数据不那么具体,您可以强制转换为 Collectioin 实现的任何接口。问题是,如果您正在创建一个Collection<T>.

于 2012-04-09T11:19:45.067 回答
0

这完全取决于要求。如果处理 DAL 或返回数据库对象,则 IEnumerable 更可取。

声明为 Collection 将提供更多功能。 你可以在那里得到更多的想法。

于 2012-04-09T11:29:04.570 回答