我想做一个foreach循环,经常让游戏中的玩家获得金牌,我尝试了以下方法:

foreach (KeyValuePair<int, string> kVP in names)
{
    player[kVP.Key].gold += 1;
    continue;
}


但这并不是无限的。它实际上只给出1金,然后停止。

如果有帮助,则namesDictionary<int, string>

我的确意识到foreach循环永远不会停止,但是它并没有给我带来任何好处。

注意:每个人,我看到我不应该使用foreach循环,但需要kVP.Key,因为它通过ID标识玩家,该ID在player []的[]中。我不知道如何在另一个循环中得到它

最佳答案

您应该有一个游戏循环,无论何时运行游戏,该循环都应该运行。在该循环中,如果自上次运行该代码以来已足够长的时间(大概是因为您不希望此代码在游戏循环的每个迭代中都运行,而是在第N次迭代中运行),则您将运行此代码。

当然,continue;是没有意义的,可以简单地将其删除。当到达主体末端时,它已经知道要进行下一次迭代;您不需要赘述,也不是说它确实会伤害任何东西(除了可读性之外)。



当然,只是为了回答您提出的字面问题(即使它不能解决您的问题),这是一个简单的扩展方法,您可以调用该序列以无限重复该序列:

public static IEnumerable<T> RepeatForever<T>(this IEnumerable<T> sequence)
{
    while (true)
        foreach (var item in sequence)
            yield return item;
}


因此,您可以编写:

foreach (KeyValuePair<int, string> kVP in names.RepeatForever())
{
    player[kVP.Key].gold += 1;
}


永远添加黄金。

关于c# - 如何制作一个无限的foreach循环?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21123672/

10-12 00:19
查看更多