假设我们有一个类Foo,其中有一个Int32字段Bar,并且您想按Foo值对Bar对象的集合进行排序。一种方法是实现IComparableCompareTo()方法,但是也可以使用语言集成查询(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/

10-10 21:55