是否有可能"寻求"通过一个循环?基于某些条件,我想做一个"继续到位,"通过循环快进。像这样:
for(var thing in things)
{
// Do stuff
if(something)
{
// Move iteration forward until the iteration object ("thing") meets the right condition
while(true)
{
// Move the iteration forward...somehow
[Missing code goes here]
if(thing.Property == somevalue)
{
break;
}
}
}
// Do more stuff on the new value of "thing"
}
我可以使用continue
,但我不想回到循环的顶部。我想在枚举器中向前循环,然后从我离开的地方继续前进。
我猜这是不可能的。如果没有,那么模仿我想要做的事情的最佳逻辑是什么。
答案 0 :(得分:5)
您是否考虑使用标准的for
循环代替您正在使用的foreach
循环?
E.g。
var thing;
for (int i = 0; i < things.Length; i++)
{
thing = things[i];
//do stuff
if(something)
{
while([thing doesn't meet condition] && i < things.Length - 1 )
{
thing = things[++i];
}
}
}
如果您之前(i++
)看过增量器,++i
可能会显得很奇怪。所有这一切都是在 之前增加i
。因此,如果您在while
上输入things[5]
循环,则thing
将设置为things[6]
。如果您无法再加载任何对象,while
循环也会中断。
答案 1 :(得分:2)
在循环之前过滤东西
var filtered = things.Where(x => x.Property == somevalue);
foreach ( var thing in filtered )
{
if (something)
// Do more stuff on the new value of "thing"
}
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以“重建”foreach
的逻辑。请注意using
(因为foreach
处置枚举器)
using (var enu = things.GetEnumerator())
{
bool success;
while (success = enu.MoveNext())
{
// Current value (always "valid"): enu.Current;
if (something)
{
while (success = enu.MoveNext())
{
// Current value (always "valid"): enu.Current;
if (enu.Current == someValue)
{
break;
}
}
}
// Current value (check success before using it): enu.Current;
if (success)
{
// Do more stuff on the new value of "thing"
}
}
}
if (res)
是必要的,因为内部while
可以“耗尽”调查员。