LINQ的可枚举方法是否维持元素的相对顺序?

假设我有List foos ,其中元素的当前顺序很重要。 如果我然后应用LINQ Enumerable方法,如GroupByWhereSelect ,我可以依赖生成的IEnumerable以与原始列表相同的相对顺序进行迭代吗?

是的,对于Enumerable方法(LINQ to Objects,适用于您提到的List ),您可以依赖SelectWhereGroupBy返回的元素的顺序。 对于像ToDictionaryDistinct这样天生无序的东西,情况并非如此。

从Enumerable.GroupBy文档:

IGrouping对象的生成顺序基于源中元素的顺序,这些元素生成每个IGrouping的第一个键。 分组中的元素按它们在source出现的顺序生成。

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