Creates a list by repeating another list.
using System.Linq;
using System.Diagnostics;
namespace System.Collections.Generic
{
public static class EnumeratorExtensions
{
/// <summary>
/// Creates a list by repeating another list.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source">The list to repeat.</param>
/// <param name="count">The number of items to return.</param>
/// <returns>A circular list of items.</returns>
public static IEnumerable<T> Cycle<T>(this IEnumerable<T> source, int count)
{
if (source == null)
throw new ArgumentNullException("source");
return CycleIterator<T>(source, count);
}
private static IEnumerable<T> CycleIterator<T>(IEnumerable<T> source, int count)
{
Debug.Assert(source != null, "source is null.");
int i = 0;
while (i < count)
using (IEnumerator<T> data = source.GetEnumerator())
{
while (i < count && data.MoveNext())
{
yield return data.Current;
i++;
}
}
}
}
}
Related examples in the same category