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

Bik*_*iki 0 c# c#-3.0 c#-4.0

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

Collection<MyClass> obj = new Collection<MyClass>();
Run Code Online (Sandbox Code Playgroud)

要么

IEnumerable<MyClass> obj = new Collection<MyClass>();
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 5

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

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

var obj = new Collection<MyClass>();
Run Code Online (Sandbox Code Playgroud)

如果该对象暴露于外部的代码(例如,通过一个属性,或者如果它是由一个方法返回),那么你应该选择,让您给出类的公有接口中最好的感觉的类型.这意味着根据经验,您应该使用尽可能最少的特殊类型,并且总是更喜欢接口.

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