LINQ的Enumerable方法是否保持元素相对顺序?

13

假设我有一个 List<Foo> foos,其中元素的当前顺序很重要。如果我应用一个LINQ Enumerable方法,例如GroupByWhereSelect,能否依靠结果IEnumerable<Foo>以与原始列表相同的相对顺序进行迭代?


我不会直接回答你的问题,因为 @Mehrdad 已经做得很好了,但如果你真的想了解 Linq 在底层是如何工作的,那么可以看一下 Jon Skeet 的优秀博客系列EduLinq series of blog posts - Andrew Cooper
1
请参见https://dev59.com/5nVC5IYBdhLWcg3wtzkQ。 - goodeye
1个回答

20

对于Enumerable方法(适用于您提到的List<T>的LINQ to Objects),您可以依赖SelectWhereGroupBy返回的元素顺序。但是,对于本质上是无序的事物,例如ToDictionaryDistinct,则不是这种情况。

来自Enumerable.GroupBy文档:

IGrouping<TKey, TElement>对象按照其来源source中产生第一个键的元素顺序进行生成。分组中的元素按它们在source中出现的顺序进行生成。

对于IQueryable扩展方法(其他LINQ提供程序),不一定如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接