Linq разделить последовательность на несколько последовательностей - C#
Формулировка задачи:
Имеем последовательсть IEnumerable<T>.
Необходимо "постраничное" чтение, то есть извлекать из этой последовательности, например, 30 элементов, потом еще 30 .... и остаток (меньше 30).
Кол-во элементов в данном случае фиксировано, но хотелось бы чтоб можно было указать как параметр.
Решение задачи: «Linq разделить последовательность на несколько последовательностей»
textual
Листинг программы
- public static IEnumerable<IEnumerable<T>> Paginate<T>(this IEnumerable<T> collection, int pageSize)
- {
- if (collection == null) throw new ArgumentNullException("collection");
- if (pageSize < 0) throw new ArgumentOutOfRangeException("pageSize");
- var page = new T[pageSize];
- int i = 0;
- foreach (T item in collection)
- {
- page[i++] = item;
- if (i == pageSize)
- {
- yield return page;
- page = new T[pageSize];
- i = 0;
- }
- }
- if (i == pageSize) yield return page;
- else yield return page.Take(i).ToArray();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д