如何制作无限的foreach循环?

use*_*642 1 c# foreach

我想制作一个foreach循环,以便经常给游戏中的玩家提供金牌,我尝试了以下方法:

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

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

如果它有帮助,names是一个Dictionary<int, string>.

我确实意识到foreach循环永远不会停止,但它并没有给我任何金币.

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

Ser*_*rvy 8

你应该有一个游戏循环,它应该在游戏运行时运行.在该循环中,如果自上次执行此代码以来已经足够长(因为,可能,您不希望这次运行游戏循环的每次迭代,而是每次N次迭代),您将运行此代码.

当然,这continue;是毫无意义的,可以简单地删除.当到达身体的末端时,它已经知道进入下一次迭代; 你不需要冗余地陈述这一点,而不是它真的伤害任何东西(超出可读性).


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

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

从而允许你写:

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

永远加入黄金.