using System.Collections.Generic;
static void Main(string[] args)
var itemCount = rnd.Next(20);
var input = Enumerable.Range(0, itemCount);
var result = input.Split(parts);
Console.WriteLine($"Splitting {{ {string.Join(", ", input)} }} into {parts} parts:\r\n");
foreach (var chunk in result)
Console.WriteLine(string.Join(", ", chunk));
static class LinqExtensions
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts)
var collection = list is ICollection<T> c
var itemCount = collection.Count;
var itemsInEachChunk = itemCount / parts;
var chunks = itemCount % parts == 0
var itemsToChunk = chunks * itemsInEachChunk;
foreach (var chunk in collection.Take(itemsToChunk).Chunk(itemsInEachChunk))
if (itemsToChunk < itemCount)
yield return collection.Skip(itemsToChunk);