In short, it buffers everything and then walks through it backwards. Not efficient, but then, neither is OrderBy from that perspective.
In LINQ-to-Objects, there are buffering operations (Reverse, OrderBy, GroupBy, etc) and non-buffering operations (Where, Take, Skip, etc).
As an example of a non-buffering Reverse
implementation using IList<T>
, consider:
public static IEnumerable<T> Reverse<T>(this IList<T> list) {
for (int i = list.Count - 1; i >= 0; i--) {
yield return list[i];
}
}
Note that this is still a little susceptible to bugs if you mutate the list while iterating it... so don't do that ;-p
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…