Eri*_*ert 36
我想的时间越长,我就越怀疑"延期执行"的整个概念是否真的具有教育价值.
我会否认它来回答你的问题.IEnumerable<T>,IQueryable<T>并且IList<T>不以任何方式代表"延期"或"急切"计算.
相反,接口表示提供服务的能力. IEnumerable<T>代表服务"我可以提供T类型的一个序列,可能是无限的,一次一个". IQueryable<T>代表服务"我可以代表对数据源的查询,并按需提供该查询的结果". IList<T>表示服务"我可以随机访问可能可变的,有限大小的T类型项目列表".
这些服务都没有说明服务提供商的实施细节.IList<T>服务提供者可能完全是懒惰的; IQueryable<T>服务提供商可能完全渴望.如果你想做一个延期执行IList<T>,你就可以了.没有人阻止你!
Jon*_*eet 21
IList<T>支持通过索引器随机访问 - 以及Count属性.这两者都违背了使用流数据延迟执行的精神,除非你建议你真的只想要一些东西在你访问任何东西时加载整个列表.如果这就是你所追求的,Lazy<T>可能是票......
正如@Joe指出的那样,IList<T>抽象出一个名词.IEnumerable<T>并且IQueryable<T>是动词的抽象.
IList<T>是一个可以被视为列表的集合的抽象.IEnumerable<T>和'IQueryable抽象动作:对基础集合中包含的项进行枚举或查询.