IEnumerable .Last()是否针对List 进行了优化?
我有一个名为L
的List
,包含N个项目。
L.Last()
,即IEnumerable
扩展方法,是否会在线性时间内遍历所有N项?
或者它是否内部优化以具有L[L.Count - 1]
的恒定时间性能?
你是对的,如果你看看代码如何实现Last
(来自Reflector):
public static TSource Last(this IEnumerable source) { if (source == null) { throw Error.ArgumentNull("source"); } IList list = source as IList ; if (list != null) { int count = list.Count; if (count > 0) { return list[count - 1]; } } else { using (IEnumerator enumerator = source.GetEnumerator()) { if (enumerator.MoveNext()) { TSource current; do { current = enumerator.Current; } while (enumerator.MoveNext()); return current; } } } throw Error.NoElements(); }
它实际上通过返回list[count - 1];
优化List
list[count - 1];