一尘不染

我应该总是返回IEnumerable吗 代替IList?

c#

当我编写自己的DAL或返回一组项目的其他代码时,我应该始终执行return语句:

public IEnumerable<FooBar> GetRecentItems()

要么

public IList<FooBar> GetRecentItems()

当前,在我的代码中,我一直在尝试尽可能多地使用IEnumerable,但是我不确定这是否是最佳实践吗?这似乎是正确的,因为我在返回最通用的数据类型的同时仍对其功能进行了描述,但这也许是不正确的。


阅读 194

收藏
2020-05-19

共1个答案

一尘不染

这实际上取决于您为何使用该特定界面。

例如,IList<T>有几种方法是不存在的IEnumerable<T>

  • IndexOf(T item)
  • Insert(int index, T item)
  • RemoveAt(int index)

和属性:

  • T this[int index] { get; set; }

如果您以任何方式需要这些方法,则一定要返回IList<T>

此外,如果使用IEnumerable<T>结果的方法期望使用IList<T>,则它将避免考虑任何所需的转换而节省CLR,从而优化了编译后的代码。

2020-05-19