示例#1
0
        public static IEnumerable <IEnumerable <T> > Partition <T>(this IEnumerable <T> source, int chunkSize)
        {
            var enumeratorWithStatus = new EnumeratorWithStatus <T> {
                enumerator = source.GetEnumerator()
            };

            while (enumeratorWithStatus.hasMore)
            {
                yield return(getChunk(enumeratorWithStatus, chunkSize).ToList());
            }
        }
示例#2
0
 private static IEnumerable <T> getChunk <T>(EnumeratorWithStatus <T> enumeratorWithStatus, int chunkSize)
 {
     while (chunkSize > 0)
     {
         if (enumeratorWithStatus.enumerator.MoveNext())
         {
             chunkSize--;
             yield return(enumeratorWithStatus.enumerator.Current);
         }
         else
         {
             enumeratorWithStatus.hasMore = false;
             yield break;
         }
     }
 }