Search code examples
c#loopsforeachreserved-words

Restart a foreach loop in C#?


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..


Solution

  • Use the good old goto:

    restart:
    foreach(Constrain c in Constrains)
    {
       if(!c.Allows(a))
       {
          a.Change();
          goto restart;
       }
    }
    

    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:

    bool restart;
    do {
       restart = false;
       foreach(Constrain c in Constrains)
       {
          if(!c.Allows(a))
          {
             a.Change();
             restart = true;
             break;
          }
       }
    } while (restart);