IList<> returned type instead of List<>
我在依赖项注入控制器的一个例子中发现了这个方法。使用接口类型
1 2 3 4 5 6 | public IList<string> GetGenreNames() { var genres = from genre in storeDB.Genres select genre.Name; return genres.ToList(); } |
谢谢
实际原因是,你要去问最初的程序员这个方法。
不过,我们可以想出一个合理的理由。
- 输入参数应尽可能开放和通用。如果可以使用任何可以枚举的集合类型,则不要接受数组。(也就是说,如果你要做的只是做一个
foreach ,那么最好选择IEnumerable 而不是List )。 - 输出参数和返回类型应尽可能具体,但尽量返回最可用和最灵活的数据类型,而不牺牲性能或安全性。如果可以返回为结果(如
int[] 或List 创建的数组或列表,则不要返回只能枚举的集合(如IEnumerable )。
这些指导原则在互联网上列出了很多地方(用不同的词来说),它们可以帮助人们编写好的API。
- 枚举结束(流访问)
- 按索引访问(随机访问)
- 修改(添加、删除等)
如果您要返回
目标接口总是比目标具体类型更好。
所以,如果返回IList,这意味着任何实现IList的东西都可以返回,那么就提供更好的分离。
查看此信息以了解更多信息
为什么公开列表被认为不好?
这是OOP中的基本规则。有一个接口是很好的,这样您的客户机(getgenrenames的调用者)就只知道如何调用(函数签名、唯一需要记住的东西,而不是实现细节等)来获得服务。
接口编程支持OOP的所有优点。它更通用,保持关注点的分离,更可重用。