为了账号安全,请及时绑定邮箱和手机立即绑定

正确使用“收益率”

正确使用“收益率”

C#
红糖糍粑 2019-12-07 13:19:22
该产量关键字是其中的一个关键字,在C#是继续迷惑我,而且我正确使用它,我从来没有自信。在以下两段代码中,哪个是首选,为什么?版本1:使用收益回报public static IEnumerable<Product> GetAllProducts(){    using (AdventureWorksEntities db = new AdventureWorksEntities())    {        var products = from product in db.Product                       select product;        foreach (Product product in products)        {            yield return product;        }    }}版本2:返回列表public static IEnumerable<Product> GetAllProducts(){    using (AdventureWorksEntities db = new AdventureWorksEntities())    {        var products = from product in db.Product                       select product;        return products.ToList<Product>();    }}
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

当我计算列表中的下一个项目(甚至下一个项目组)时,我倾向于使用yield-return。

使用版本2之前,您必须具有完整的列表,然后才能返回。通过使用yield-return,您实际上只需要在退货之前就拥有下一项。

除其他外,这有助于在较长的时间范围内分散复杂计算的计算成本。例如,如果列表连接到GUI,并且用户从不进入最后一页,则您永远不会计算列表中的最终项目。

最好使用yield-return的另一种情况是IEnumerable表示一个无限集。考虑素数列表或无限数量的随机数。您永远无法一次返回完整的IEnumerable,因此您可以使用yield-return递增地返回列表。

在您的特定示例中,您拥有完整的产品列表,因此我将使用版本2。


查看完整回答
反对 回复 2019-12-07
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

填充临时列表就像下载整个视频,而使用yield就像流播该视频。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 258 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信