diff --git a/src/System.Linq/src/System/Linq/Enumerable.cs b/src/System.Linq/src/System/Linq/Enumerable.cs index 6924c11f0612..b2acae99e13b 100644 --- a/src/System.Linq/src/System/Linq/Enumerable.cs +++ b/src/System.Linq/src/System/Linq/Enumerable.cs @@ -3442,18 +3442,21 @@ internal Buffer(IEnumerable source, bool queryInterfaces = true) if (items == null) { - foreach (TElement item in source) + using (IEnumerator e = source.GetEnumerator()) { - if (items == null) + if (e.MoveNext()) { items = new TElement[4]; + items[0] = e.Current; + count = 1; + + while (e.MoveNext()) + { + if (items.Length == count) Array.Resize(ref items, checked(count * 2)); + items[count] = e.Current; + ++count; + } } - else if (items.Length == count) - { - Array.Resize(ref items, checked(count * 2)); - } - items[count] = item; - count++; } }