假设我有List<Foo> foos
,其中元素的当前顺序很重要。如果我然后应用LINQ Enumerable方法,例如GroupBy
,Where
或Select
,我可以依赖生成的IEnumerable<Foo>
以与原始列表相同的相对顺序进行迭代?
答案 0 :(得分:16)
是的,对于Enumerable
方法(LINQ to Objects,适用于您提到的List<T>
),您可以依赖Select
,Where
返回的元素的顺序或GroupBy
。对于ToDictionary
或Distinct
等天生无序的内容,情况并非如此。
来自Enumerable.GroupBy文档:
根据生成每个
IGrouping<TKey, TElement>
的第一个键的源中元素的顺序,按顺序生成IGrouping<TKey, TElement>
个对象。分组中的元素按照它们在source
中的显示顺序产生。
IQueryable
扩展方法(其他LINQ提供程序)不一定如此。