Я добился этого здесь: http://rextester.com/HXACA68585
Метод:
private static IEnumerable<T> Cycle<T>(List<T> data, int num)
{
var start = num%data.Count;
for(var i=0;i<data.Count;i++)
{
yield return data[(i+start)%data.Count];
}
}
который вы можете вставить обратно в новый список, если хотите:
List<string> list = new List<string>(){"a", "b", "c", "d", "e"};
List<string> newList = new List<string>(Cycle(list,2)); // contains c, d, e, a, b
Но чтобы проверить требуемые результаты, используйте это:
List<string> list = new List<string>(){"a", "b", "c", "d", "e"};
Dump(Cycle(list,0));
Dump(Cycle(list,1));
Dump(Cycle(list,2));
Dump(Cycle(list,3));
Dump(Cycle(list,4));
Dump(Cycle(list,5));
Dump(Cycle(list,6));
Выведите следующее:
a, b, c, d, e
b, c, d, e, a
c, d, e, a, b
d, e, a, b, c
e, a, b, c, d
a, b, c, d, e
b, c, d, e, a