// Needed for NET40 #if !NET_4_6 using System; using System.Collections; using System.Collections.Generic; namespace LinqInternal.Collections { internal static partial class Extensions { public static IEnumerable> Partition(this IEnumerable items, int partitionSize) { if (items == null) { throw new ArgumentNullException("items"); } if (partitionSize < 1) { throw new ArgumentOutOfRangeException("partitionSize"); } return new PartitionEnumerable(items, partitionSize); } internal class PartitionEnumerable : IEnumerable> { private readonly IEnumerable _source; private readonly int _partitionSize; public PartitionEnumerable(IEnumerable source, int partitionSize) { _source = source; _partitionSize = partitionSize; } public IEnumerator> GetEnumerator() { var group = new List(); var count = _partitionSize; foreach (var item in _source) { group.Add(item); count--; if (count == 0) { yield return group; group = new List(); count = _partitionSize; } } if (count < _partitionSize) { yield return group; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } } } #endif