栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

IEnumerable vs List-使用什么?它们如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IEnumerable vs List-使用什么?它们如何工作?

IEnumerable
描述行为,而List是该行为的实现。使用时
IEnumerable
,可以使编译器有机会将工作推迟到以后,可能会一直进行优化。如果使用ToList(),则强制编译器立即对结果进行校验。

每当我“堆叠”
LINQ表达式时,我都会使用

IEnumerable
,因为通过仅指定行为,LINQ就有机会推迟评估并可能优化程序。还记得LINQ如何在枚举之前不生成SQL查询数据库吗?考虑一下:

public IEnumerable<Animals> AllSpotted(){    return from a in Zoo.Animalswhere a.coat.HasSpots == trueselect a;}public IEnumerable<Animals> Feline(IEnumerable<Animals> sample){    return from a in samplewhere a.race.Family == "Felidae"select a;}public IEnumerable<Animals> Canine(IEnumerable<Animals> sample){    return from a in samplewhere a.race.Family == "Canidae"select a;}

现在,您有了一个选择初始样本(“ AllSpotted”)以及一些过滤器的方法。现在,您可以执行以下操作:

var Leopards = Feline(AllSpotted());var Hyenas = Canine(AllSpotted());

那么使用List
over更快

IEnumerable
吗?仅当您要阻止查询多次执行时。但是总体上更好吗?在上面的代码中,Leopards和Hyenas分别转换为
单个SQL查询 ,并且数据库仅返回相关的行。但是,如果我们从中返回了一个List
AllSpotted()
,则它的运行速度可能会变慢,因为数据库返回的数据可能远远超过实际需要的数据,并且浪费了在客户端进行过滤的周期。

在程序中,最好将查询转换为列表直到最后,最好,因此,如果我要多次通过Leopards和Hyenas枚举,我可以这样做:

List<Animals> Leopards = Feline(AllSpotted()).ToList();List<Animals> Hyenas = Canine(AllSpotted()).ToList();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430462.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号