c# - 返回 IList 与 List 或 IEnumerable 与 List<Class> 之间有什么区别。我想知道返回哪个更好

标签 c# asp.net .net asp.net-mvc vb.net

返回 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/

相关文章:

javascript - Select2 -- 占位符不显示

c# - 桌面应用程序可能的数据访问层设计模式是什么?

c# - 自定义集合初始化器

c# - 即使文件很大,内存也较少的文件下载

asp.net - 样式表在 ASP.NET 中无法正常工作

c# - 在 ASP.NET 中将表格导出到 Word 文档时图像损坏

asp.net - 将列添加到新的 DataRow

c# - MVC 新窗口瓶颈

c# - XML 序列化数据返回的最佳数据类型

c# - 统一: Apple Game Center iOS7 registers the scores for only 30 minutes in the leaderboard