2013-06-19 3 views
-1

Привет, ребята, как повторить один цикл ahain в foreach.Как повторить один цикл в foreach

foreach (string line in File.ReadLines("file.txt")) 
{ 
    // now line == "account", next line == "account1" 
    if (line.Contains("a")) 
     //next loop take "account1"; 
    else 
     // need to set that next loop will take line == "account" again 
} 

Как это сделать?

+4

Вы не можете; вместо этого используйте 'for'. – Nolonar

+2

Этот пример просто застрял в цикле, читающем строку «account» снова и снова ...? –

+0

Это похоже на проблему XY - http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem. Можете ли вы объяснить свое общее намерение для кода, поскольку этот пример кажется очень ошибочным? – Kami

ответ

4

Нет необходимости изменять код, предполагая, что в цикле имеется только конструкция if/else.

Если условие if оценивается как true, то else не будет выполняться, и цикл возобновится.

В более сложной, где вы хотите, чтобы немедленно возобновить цикл и не обеспечивают ничего другого следующее условие выполняется, использовать continue заявление:

Продолжить заявление передает управление к следующей итерации вмещающих время, do, for или foreach, в котором он появляется.

foreach (string line in File.ReadLines("file.txt")) 
{ 
    // now line == "account", next line == "account1" 
    if (line.Contains("a")) 
     continue; 
    else 
     // need to set that next loop will take line == "account" again 

    // more stuff that we don't want to execute if line.Contains("a") 
} 
+0

@ Downvoter - забота о коммитете? – Oded

+0

Я не спустил вниз, но я не уверен, что он этого хочет. Если тело else - 'print line', он может многократно печатать« учетную запись ». Для этого вам нужен дополнительный код. – nmat

+0

@nmat - При дополнительном чтении то, что он, кажется, хочет, не имеет смысла. Если у него есть линия, которую он хочет, почему бы просто не поработать над ней и не покончить с ней? – Oded

1

Пока я не полностью понимаю ваш пример, я думаю, что я понимаю ваш вопрос. У меня была такая же проблема, и я смог найти решение: включить цикл while в foreach. В вашем примере это будет выглядеть следующим образом:

foreach (string line in File.ReadLines("file.txt")) 
{ 
    bool repeat = true; 
    while (repeat) 
    { 
     // now line == "account", next line == "account1" 
     if (line.Contains("a")) 
     { 
      //do your logic for a break-out case 
      repeat = false; 
     } 
     else 
     { 
      //do your logic for a repeat case on the same foreach element 
      //in this instance you'll need to add an "a" to the line at some point, to avoid an infinite loop. 
     } 
    } 
} 

Я знаю, что я очень поздно в игре, но, надеюсь, это будет полезно для всех, кто натыкается здесь с той же проблемой.

1

Я думаю, это могло бы также полезно, если кто-то пришел

for (int i = 0; i < inventoryTimeBlocks.Count; i++) 
{ 
if (line.Contains("a")) 
    //next loop take "account1"; 
else 
{ 
    if(i > 0) 
    { 
    i = i - 1; 
    continue; 
    } 
} 
} 
Смежные вопросы