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