diff --git a/src/System.Linq/src/System/Linq/Enumerable.cs b/src/System.Linq/src/System/Linq/Enumerable.cs index 9ed88232d8a2..0c4c5cca325a 100644 --- a/src/System.Linq/src/System/Linq/Enumerable.cs +++ b/src/System.Linq/src/System/Linq/Enumerable.cs @@ -884,7 +884,22 @@ private static IEnumerable TakeWhileIterator(IEnumerable Skip(this IEnumerable source, int count) { if (source == null) throw Error.ArgumentNull("source"); - return SkipIterator(source, count); + + IList sourceList = source as IList; + return sourceList != null ? SkipList(sourceList, count) : SkipIterator(source, count); + } + + private static IEnumerable SkipList(IList source, int count) + { + if (count < 0) + { + count = 0; + } + + while (count < source.Count) + { + yield return source[count++]; + } } private static IEnumerable SkipIterator(IEnumerable source, int count)