当我们返回IList vs List或IEnumerable vs List <Class>时有什么区别.我想知道哪个更好回归

vir*_*der 9 .net c# vb.net asp.net asp.net-mvc

当我们返回IList vs List或IEnumerable vs List时有什么区别.

我想知道哪个更好回归.

当我们需要使用哪一个.它也会对性能产生影响.

ial*_*eev 12

没有这样的类型总是更好的返回.根据您的设计/性能/等目标,您应该做出决定.

IEnumerable<T> 当你想表示项目序列时可以使用,你可以迭代,但你不想允许修改(添加,删除等).

IList<T>为您提供可以使用的所有内容IEnumerable<T>,以及可以让您更好地控制集合的操作:添加,删除,计数,索引访问等.

List<T>是一个具体的实现IList<T>.我想说几乎总是最好IList<T>从你的方法中公开接口而不是List<T>实现.它不仅仅是关于列表 - 更喜欢接口而不是具体实现是一个基本的设计原则.

好的,现在关于非通用版本IEnumerable, IList, List:它们实际上来自.NET框架的早期版本,使用通用等价物的生活要好得多.

关于性能的几句话:( IEnumerable<T>with IEnumerator<T>)实际上是一个迭代器,允许你推迟一些计算直到以后.这意味着不需要立即分配内存来存储数据量(当然,当你拥有迭代器后面的数组时,情况并非如此).您可以根据需要逐步计算数据.但这意味着这些计算可能会反复执行(例如,每个foreach循环).另一方面,使用List,您在内存中拥有固定数据,具有廉价的Index和Count操作.如你所见,这完全是妥协.