diff options
author | Marek Safar <marek.safar@gmail.com> | 2009-08-07 14:44:50 +0400 |
---|---|---|
committer | Marek Safar <marek.safar@gmail.com> | 2009-08-07 14:44:50 +0400 |
commit | ed47ca25ea569943bcfd4800a515196482bc170e (patch) | |
tree | 0aa649fc13d6efc0a74864d169c63f087cf2289b /mcs/class/System.Core/System.Linq/Enumerable.cs | |
parent | c1be496ffb859a36e75be5ae39eab5e6b11fb2e4 (diff) |
2009-08-07 Marek Safar <marek.safar@gmail.com>
* Enumerable.cs (Skip): Optimized and fixed int.MaxValue overflow.
svn path=/trunk/mcs/; revision=139558
Diffstat (limited to 'mcs/class/System.Core/System.Linq/Enumerable.cs')
-rw-r--r-- | mcs/class/System.Core/System.Linq/Enumerable.cs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/mcs/class/System.Core/System.Linq/Enumerable.cs b/mcs/class/System.Core/System.Linq/Enumerable.cs index d7c07b894a3..11ce43f2bed 100644 --- a/mcs/class/System.Core/System.Linq/Enumerable.cs +++ b/mcs/class/System.Core/System.Linq/Enumerable.cs @@ -1726,12 +1726,17 @@ namespace System.Linq static IEnumerable<TSource> CreateSkipIterator<TSource> (IEnumerable<TSource> source, int count) { - int i = 0; - foreach (var element in source) { - if (i++ < count) - continue; + var enumerator = source.GetEnumerator (); + try { + while (count-- > 0) + if (!enumerator.MoveNext ()) + yield break; - yield return element; + while (enumerator.MoveNext ()) + yield return enumerator.Current; + + } finally { + enumerator.Dispose (); } } |