asp.net-mvc - IList<> 返回类型而不是 List<>

标签 asp.net-mvc generics

我在一个依赖示例中找到了这个方法 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/

相关文章:

javascript - 如何将列表从 C# Angular 传递到 Angular Controller ?

ios - 如何获取泛型类型类的大小(计数)?

powershell - powershell:创建具有语法错误的通用哈希集?

c# - VSPerf 和 A​​zure 云服务

javascript - 为什么 jQuery Ajax 在 Post 之前发送 Get 请求?

ASP.NET MVC - 母版页的代码隐藏

typescript - 使通用类型 Array<keyof T> 需要 T 的所有键

asp.net-mvc - 菜单上没有添加 Controller ,也无法在 MVC 4.5 中添加 View

ios - 通用功能在同一环境中表现不同

c# - 将字符串映射到实体以与通用方法一起使用