gpt4 book ai didi

.net - IEnumerable<> 上的 First() 和 Last() 真的是第一个和最后一个吗?

转载 作者:行者123 更新时间:2023-12-04 23:07:54 24 4
gpt4 key购买 nike

我最近开始意识到您不应该对 IEnumerable 的实现做出任何假设(例如,您不能假设当您在 foreach 循环期间对来自 IEnumerable 的对象之一进行更改时,在循环(或什至在每次迭代之后)可以在 IEnumerable 中找到更改的对象。

因此,在重新检查了我对 IEnumerable 的假设之后,我得出的结论是,实际上您唯一可以确定的是它允许您遍历集合的所有元素,其中集合(不是 ICollection 本身)可以成为任何东西。

我认为我不能做出的另一个假设是基础集合的顺序是特定的。从理论上讲,我会说,每次循环遍历它们时,您都可以按不同的顺序获取这些项目。

现在回到我原来的问题,考虑到上述情况,First()Last()每次都可以返回不同的项目(理论上看 IEnumerable 是什么)?

附件信息:
当然,通常这会很好,因为 IEnumerable 是由订购的东西实现的。但是如果 IEnumerable 调用一个 web 服务来获取它的元素呢?

背景信息:
我在考虑这个是因为我想为 foreach 循环中的第一个和最后一个元素做一些特定的事情。所以我查了 if(currentElement == Enumerable.Last())

最佳答案

First()获取一个枚举器并返回它找到的第一个值。 Last()大多数情况下,遍历整个集合并在到达枚举末尾之前返回元素 1。没错,这就是你所知道的一切。具体来说,集合可以是无限的,然后 Last()永远不会回来。

Jon Skeet 撰写的关于 LINQ 运算符的系列文章非常有用 - 请参阅 Edulinq .他描述了每一个 LINQ 运算符,并详细讨论了所有的想法和假设。它提供了非常好的洞察力,了解所有这些事情的真正运作方式。

关于.net - IEnumerable<> 上的 First() 和 Last() 真的是第一个和最后一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6675561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com