寻找循环列表解决方案

时间:2015-10-14 16:09:18

标签: c# .net list collections

我不确定如何解决这个问题,所以我将从“伪”代码开始:

List<Player> players = new List<Player>();
players.Add(p1);
players.Add(p2);
players.Add(p3);

while(true) //infinite loop
{
    Player nextOne = players.Get(); // It will always get next player
}

我正在寻找一个集合/列表/缓冲区/数组等,它将具有某种“Get”方法,它总是返回下一个项目。当它到达终点时,它将返回第一项。

很好的例子就是纸牌游戏,比如扑克:我有玩家名单......我总是会回到下一个玩家,就像在圈子里一样。

我的问题是:是否已经在C#/ .NET的某个地方实现了这样的集合? 如果没有,是否正在为List编写最佳解决方案的扩展方法?

1 个答案:

答案 0 :(得分:6)

您可以使用以下方法创建一个无限重复另一个(可能是有限的)序列的序列。

//TODO consider coming up with a better name
public static IEnumerable<T> IterateInfinitely<T>(
    this IEnumerable<T> sequence)
{
    while(true)
        foreach(var item in sequence)
            yield return item;
}

使用此功能,您现在可以写:

foreach(var player in players.IterateInfinitely())
{
    //TODO do stuff 
}