6

我有一个List<T>, 称为L, 包含 N 项。

扩展方法是否L.Last()IEnumerable<T>在线性时间内遍历所有 N 个项目?

或者它是否在内部进行了优化以具有恒定时间性能L[L.Count - 1]

4

1 回答 1

11

你是对的,如果你看一下如何实现的代码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>通过返回来优化list[count - 1];

于 2013-08-13T03:14:27.277 回答