IEnumerable .Last()是否针对List 进行了优化?

我有一个名为LList ,包含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];