Hei*_*nzi 7 .net c# linq linq-to-objects
var source = new List<string> { "A1", "A2", "B1", "B2" };
var filtered = source.Where(s => s.StartsWith("A"));
foreach (var s in filtered)
Console.WriteLine(s); // outputs first A1 and then A2
Run Code Online (Sandbox Code Playgroud)
它似乎像Enumerable.Where保持单元的原始顺序上的有序的IEnumerable使用时(如List<T>或T[]).总是这样吗?如果是的话,这会记录在哪里?
小智 7
Microsoft确实记录了LINQ to Objects保留排序.文档 http://msdn.microsoft.com/en-us/library/dd460677%28v=vs.110%29.aspx说
在PLINQ中,目标是在保持正确性的同时最大化性能.查询应尽可能快地运行,但仍会产生正确的结果.在某些情况下,正确性要求保留源序列的顺序; 但是,订购可能在计算上很昂贵.因此,默认情况下,PLINQ不保留源序列的顺序.在这方面,PLINQ类似于LINQ to SQL,但不像LINQ to Objects,它确实保留了排序.
正如这篇stackoverflow文章中提到的一些LINQ方法的microsoft文档,它们没有保留顺序.例如,不同的文档提到此方法返回无序序列.