If you look at my answer to a similar question, it seems that it would be easy to provide non-naive (i.e. correct exceptions) Skip optimizations for any 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++]; }
Of course, your example uses an array. Since arrays do not throw exceptions during iteration, even doing something as complex as my function would be unnecessary. Thus, we can conclude that MS did not optimize it because they did not think about it, or they did not think that this is a fairly common case that should be optimized.
Gabe
source share