C# 如何创建无限foreach循环?

C# 如何创建无限foreach循环?,c#,foreach,C#,Foreach,我想做一个foreach循环,每隔一段时间就给游戏中的玩家一次金牌,我尝试了以下方法: foreach (KeyValuePair<int, string> kVP in names) { player[kVP.Key].gold += 1; continue; } foreach(名称中的KeyValuePair kVP) { 玩家[kVP.Key].gold+=1; 持续 } 但这并不是无限的。实际上,它只提供1个金币,然后停止 如果有帮助,names是一个字

我想做一个foreach循环,每隔一段时间就给游戏中的玩家一次金牌,我尝试了以下方法:

foreach (KeyValuePair<int, string> kVP in names)
{
    player[kVP.Key].gold += 1;
    continue;
}
foreach(名称中的KeyValuePair kVP)
{
玩家[kVP.Key].gold+=1;
持续
}
但这并不是无限的。实际上,它只提供1个金币,然后停止

如果有帮助,
names
是一个
字典

我知道foreach循环从未停止过,但它不会给我任何黄金


注意:各位,我知道我不应该使用foreach循环,但是需要kVP.Key,因为它通过其id标识一个播放器,该id位于播放器[]的[]s中。我不知道如何在另一个循环中实现这一点

你应该有一个游戏循环,它应该在游戏运行时运行。在该循环中,如果距离上次运行该代码已经足够长了(因为,您可能不希望它在游戏循环的每一次迭代中运行,而是在每第n次迭代中运行),那么您将运行该代码

当然,
继续是无意义的,可以简单地删除。当到达身体的末端时,它已经知道进入下一个迭代;你不需要重复地陈述这一点,也不是说它真的伤害了任何东西(除了可读性)


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

public static IEnumerable<T> RepeatForever<T>(this IEnumerable<T> sequence)
{
    while (true)
        foreach (var item in sequence)
            yield return item;
}
公共静态IEnumerable RepeatForever(此IEnumerable序列)
{
while(true)
foreach(序列中的var项目)
收益回报项目;
}
这样你就可以写:

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

你应该有一个游戏循环,它应该在游戏运行时运行。在该循环中,如果距离上次运行该代码已经足够长了(因为,您可能不希望它在游戏循环的每一次迭代中运行,而是在每第n次迭代中运行),那么您将运行该代码

当然,
继续是无意义的,可以简单地删除。当到达身体的末端时,它已经知道进入下一个迭代;你不需要重复地陈述这一点,也不是说它真的伤害了任何东西(除了可读性)


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

public static IEnumerable<T> RepeatForever<T>(this IEnumerable<T> sequence)
{
    while (true)
        foreach (var item in sequence)
            yield return item;
}
公共静态IEnumerable RepeatForever(此IEnumerable序列)
{
while(true)
foreach(序列中的var项目)
收益回报项目;
}
这样你就可以写:

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

要永远不断地增加黄金。

您不能为每个
循环创建无限
foreach
专门用于遍历集合


如果这不是您想要的,那么您不应该使用
foreach

您不能创建无限
foreach
循环
foreach
专门用于遍历集合


如果这不是您想要的,那么您不应该使用
foreach

foreach循环不是这里要使用的合适的C#构造。根据定义,它将对其迭代的集合的每个元素运行一次


您应该尝试使用以下方法之一:for()、while()或do{}while

foreach循环不是这里要使用的正确C#构造。根据定义,它将对其迭代的集合的每个元素运行一次


您应该尝试使用以下选项之一:for()、while()或do{}while

这是无限循环的一个示例:

while (true) {
    // code goes here. It will be run repeatedly, over and over, forever.
}

然而,如果你想让某些事情周期性地发生,那可能不是你想要的。这将立即发生,并且在
循环时永远无法完成
内的代码运行。

这是无限循环的一个示例:

while (true) {
    // code goes here. It will be run repeatedly, over and over, forever.
}

然而,如果你想让某些事情周期性地发生,那可能不是你想要的。这将立即发生,并且在
循环中永远无法完成
内的代码运行。

foreach
用于执行
IEnumerable
。如果您正在寻找一个无限循环,那么在(运行)
时尝试使用
运行
作为某种最终可以终止循环的标志

我怀疑你想跑得太快,否则你的球员会太富有!因此,您可能希望向循环添加一个延迟,使其仅每隔一段时间运行一次

while(Running)
{
  await Task.Delay(TimeBetweenGoldHandouts);

  foreach (KeyValuePair<int, string> kVP in names)
    player[kVP.Key].gold += 1;
}
运行时
{
等待任务。延迟(LDH和OUTS之间的时间);
foreach(名称中的KeyValuePair kVP)
玩家[kVP.Key].gold+=1;
}
注意


continue
用于跳到循环的下一个迭代。因为它是循环的最后一个条目,所以它没有意义。

foreach
用于遍历
IEnumerable
。如果您正在寻找一个无限循环,那么在(运行)
时尝试使用
运行
作为某种最终可以终止循环的标志

我怀疑你想跑得太快,否则你的球员会太富有!因此,您可能希望向循环添加一个延迟,使其仅每隔一段时间运行一次

while(Running)
{
  await Task.Delay(TimeBetweenGoldHandouts);

  foreach (KeyValuePair<int, string> kVP in names)
    player[kVP.Key].gold += 1;
}
运行时
{
等待任务。延迟(LDH和OUTS之间的时间);
foreach(名称中的KeyValuePair kVP)
玩家[kVP.Key].gold+=1;
}
注意


continue
用于跳到循环的下一个迭代。因为您将它作为循环的最后一个条目,所以它毫无意义。

我认为您误解了
foreach
continue

foreach
迭代