假设我们有一个类Foo
,其中有一个Int32
字段Bar
,并且您想按Foo
值对Bar
对象的集合进行排序。一种方法是实现IComparable
的CompareTo()
方法,但是也可以使用语言集成查询(LINQ)这样来完成
List<Foo> foos = new List<Foo>();
// assign some values here
var sortedFoos = foos.OrderBy(f => f.Bar);
现在在
sortedFoos
中,我们已经排序了foos
集合。但是,如果使用System.Diagnostics.StopWatch
对象测量OrderBy()
对集合进行排序所花费的时间始终为0毫秒。但是,每当您打印sortedFoos
集合时,显然都会对其进行排序。那怎么可能。文学不需要花时间对集合进行排序,但是在方法执行之后,对集合进行排序?有人可以向我解释这是如何工作的吗?还有一件事。假设对foos
集合进行排序后,我向其中添加了另一个元素。现在,每当我打印出集合时,添加的元素应该在最后吗?错误! foos
集合的排序方式类似于,即使我在排序后将元素添加到foos
,我添加的元素也是foos
集合的一部分。我不辞职,不了解其中的任何工作方式,所以有人可以让我清楚吗? 最佳答案
LINQ相信推迟执行。这意味着仅当您开始迭代或访问结果时才会对表达式求值。
关于c# - OrderBy扩展方法如何收集订单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17187088/