在 C# 中重新启动 foreach 循环?
如何在 C# 中重新启动 foreach
循环?
例如:
Action a;
foreach(Constrain c in Constrains)
{
if(!c.Allows(a))
{
a.Change();
restart;
}
}
这里的restart
类似于continue
或break
,但它从头开始重新启动foreach 这就像再次将 for
循环的计数器设置为 0..
这在 C# 中可能吗?
编辑:我要感谢 Mehrdad Afshari 和 Mahesh Velaga 让我在当前的实现中发现一个错误(索引 = 0),否则不会发现这个错误。
How can I restart a foreach
loop in C#??
For example:
Action a;
foreach(Constrain c in Constrains)
{
if(!c.Allows(a))
{
a.Change();
restart;
}
}
restart
here is like continue
or break
but it restarts the foreach from the begining
It is like setting the counter of a for
loop to 0 again..
Is that possible in C#?
Edit:I want to thank both Mehrdad Afshari and Mahesh Velaga for letting me discover a bug (index=0) in my current implementation, that would not have been discovered otherwise..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用古老的
goto
:如果您由于某种原因 100% 被诊断出患有 gotophobia(这不是没有原因的好事),您可以尝试使用标志代替:
Use the good old
goto
:If you're diagnosed with gotophobia 100% of the time for some reason (which is not a good thing without a reason), you can try using a flag instead:
尽管是一个非常古老的线程 - 没有一个答案对该代码的语义给予应有的关注:
a
有一系列约束a
破坏了其中任何一个,请尝试另一个a
并将其推入链中。也就是说,a.Change() 应该与约束检查循环分开,也遵循 CQS 原则:
没有 goto,没有难看的循环,只是简单干净。
Although a very old thread - none of the answers paid due attention to the semantics of that code:
a
a
breaks any of them, try anothera
and push that through the chain.That is,
a.Change()
should be separated from the constraint checking loop, also adhering to the CQS principle:No goto, no ugly loops, just simple and clean. </self-back-slapping>
正如您已经提到的,您可以做到这一点的一种方法是使用 for :
One way you can do that is using for, as you have already mentioned: