LINQ的Enumerable方法是否保持元素的相对顺序?
假设我有List<Foo> foos ,其中元素的当前顺序很重要。 如果我然后应用LINQ Enumerable方法(如GroupBy , Where或Select ,我可以依赖生成的IEnumerable<Foo>以与原始列表相同的相对顺序进行迭代吗?
是的,对于Enumerable方法(LINQ to Objects,适用于您提到的List<T> ),您可以依赖Select , Where或GroupBy返回的元素的顺序。 对于像ToDictionary或Distinct这样天生无序的事物,情况并非如此。
来自Enumerable.GroupBy文档:
IGrouping<TKey, TElement>对象按照产生每个IGrouping<TKey, TElement>的第一个键的源中元素的顺序排序。 分组中的元素按它们在source出现的顺序排序。
对于IQueryable扩展方法(其他LINQ提供者),这不一定是正确的。
上一篇: Do LINQ's Enumerable Methods Maintain Relative Order of Elements?
