IEnumerable <>上的First()和Last()真的是第一个也是最后一个?

Mat*_*els 3 .net linq ienumerable

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

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

我认为我无法做出的另一个假设是底层集合的顺序是特定的.从理论上讲,每次循环时,你都可以按照不同的顺序获取物品.

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

Exra信息: 当然通常这样会很好,因为IEnumerable是由订购的东西实现的.但是,如果IEnumerable调用Web服务来获取其元素,该怎么办呢?

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

NOt*_*Dev 6

First()获取一个枚举器并返回它找到的第一个值.Last()通常迭代整个集合并在到达枚举结束之前返回元素1.是的,这就是你所知道的.具体来说,收集可以是无限的,然后Last()永远不会返回.

关于LINQ运营商的一系列非常有用的文章由Jon Skeet 撰写 - 请参阅Edulinq.他描述了每一个LINQ运算符,并详细讨论了所有的想法和假设.它可以非常好地了解所有这些事情是如何运作的.