我在一个依赖示例中找到了这个方法 Injecting a Controller .使用接口(interface)类型的原因是什么 IList<>
而不是 List<>
?
public IList<string> GetGenreNames()
{
var genres = from genre in storeDB.Genres
select genre.Name;
return genres.ToList();
}
最佳答案
真正的原因,你要去问那个方法的原始程序员。
不过我们可以想出一个合理的理由。
- 输入参数应尽可能开放和通用。如果您可以使用任何可以枚举的集合类型,请不要使用数组。 (即,如果您要做的只是做一个
IEnumerable<int>
,则比List<int>
更喜欢foreach
) - 输出参数和返回类型应尽可能具体,但尽量在不牺牲性能或安全性的情况下返回最可用和最灵活的数据类型。如果您可以返回专门为结果创建的数组或列表(例如
IEnumerable<int>
或int[]
),则不要返回只能枚举的集合(例如List<int>
)。
这些指南在 Internet 上的许多地方都有列出(尽管用词不同),它们可以帮助人们编写好的 API。
为什么IList<T>
的原因优于List<T>
是您要返回的集合可以是:
- 枚举结束(流式访问)
- 通过索引访问(随机访问)
- 修改(添加、删除等)
如果你要返回 List<T>
你实际上不会添加任何值,除了返回一个具体类型而不是恰好实现该接口(interface)的任何类型。因此,最好返回接口(interface)而不是具体类型。您不会在外部丢失任何有用的功能,并且您仍然保留在将来用不同的东西替换返回的实际对象的可能性。
关于asp.net-mvc - IList<> 返回类型而不是 List<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744798/