返回 IList 与 List 或 IEnumerable 与 List 之间有什么区别。
我想知道返回哪个更好。
当我们需要使用一个时,它对性能有什么影响?
最佳答案
没有这样一种总是更好的返回类型。这是您应该根据您的设计/性能/等目标做出的决定。
IEnumerable<T>
当您想要表示项目序列时可以很好地使用它,您可以对其进行迭代,但您不想允许修改(添加、删除等)。
IList<T>
为您提供使用 IEnumerable<T>
可以获得的一切,以及让您更好地控制集合的操作:添加、删除、计数、索引访问等。
List<T>
是 IList<T>
的具体实现.我会说几乎总是最好公开 IList<T>
来自您的方法的接口(interface),而不是 List<T>
执行。这不仅仅是关于列表 - 更喜欢接口(interface)而不是具体实现是一个基本的设计原则。
好的,现在关于非通用版本 IEnumerable, IList, List
:
它们实际上来自 .NET Framework 的早期版本,使用通用等效项的生活会好得多。
关于性能的几句话:
IEnumerable<T>
(与 IEnumerator<T>
)实际上是一个迭代器,它允许您将一些计算推迟到以后。这意味着不需要立即分配内存来存储大量数据(当然,当迭代器后面有数组时,情况就不是这样了)。您可以根据需要逐步计算数据。但这意味着这些计算可能会一遍又一遍地执行(比如,每个 foreach
循环)。另一方面,使用 List 时,您在内存中拥有固定数据,具有廉价的 Index 和 Count 操作。如您所见,一切都是为了妥协。
关于c# - 返回 IList 与 List 或 IEnumerable 与 List<Class> 之间有什么区别。我想知道返回哪个更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26907986/