Если вы посмотрите на мой ответ на похожий вопрос, то создается впечатление, что должно быть легко обеспечить не наивную (т. Е. Выбрасывать правильные исключения) оптимизацию Skip
для любого IList
:
public static IEnumerable<T> Skip<T>(this IList<T> source, int count)
{
using (var e = source.GetEnumerator())
while (count < source.Count && e.MoveNext())
yield return source[count++];
}
Конечно, ваш пример использует массив. Поскольку массивы не генерируют исключения во время итерации, даже делать что-либо настолько сложное, как моя функция, было бы излишним. Таким образом, можно сделать вывод, что MS не оптимизировала его, потому что не думала об этом или не думала, что это достаточно распространенный случай, чтобы его можно было оптимизировать.