public static IEnumerable <IEnumerable <T> > Batch <T>(this IEnumerable <T> source, int batchSize) { using (IEnumerator <T> enumerator = source.GetEnumerator()) { while (enumerator.MoveNext()) { yield return(Utils.YieldBatchElements <T>(enumerator, batchSize - 1)); } } yield break; }