如何在C#中重新启动foreach
循环??
例如:
Action a;
foreach(Constrain c in Constrains)
{
if(!c.Allows(a))
{
a.Change();
restart;
}
}
这里的restart
类似于continue
或break
,但它从头开始重新启动了foreach,这就像将for
循环的计数器再次设置为0。
这在C#中是可能的吗?
编辑:我要感谢Mehrdad和Mahesh Velaga,他们让我在当前的实现中发现了一个bug (index=0),否则就不会发现它。
发布于 2011-01-01 21:04:04
void Main()
{
IEnumerable<Constrain> cons;
SomeObject a;
while(!TryChangeList(cons, a)) { }
}
// the name tryChangeList reveals the intent that the list will be changed
private bool TryChangeList(IEnumerable<Constrain> constrains, SomeObject a)
{
foreach(var con in constrains)
{
if(!c.Allows(a))
{
a.Change();
return false;
}
}
return true;
}
发布于 2011-01-01 21:09:13
for (var en = Constrains.GetEnumerator(); en.MoveNext(); )
{
var c = en.Current;
if (!c.Allows(a))
{
a.Change();
en = Constrains.GetEnumerator();
}
}
https://stackoverflow.com/questions/4574102
复制相似问题