2013-05-28 4 views
1

У меня есть этот Linq ForeachLinq Foreach пропуск строки

 public Func<List<string>, Foobar, List<string>> ExtractClassName = (lines, foo) 
     => 
     { 
      temp = lines.FindAll(_FooRege.IsMatch); 
      temp.ForEach(t => { lines.Remove(t); }); 

      lines.ForEach(
       lin => 
       { 
        if (foo.FooRege.IsMatch(lin)) 
        { 
         docsText.AppendLine(TrimSlashes(lin)); 
         lines.Remove(lin); 
        } 
        else if(_FooRege.IsMatch(lin)) 
        { 
         _foo.ClassName = lin.Split(' ').Last(); 
         lines.Remove(lin); 
        } 
       }); 
      return lines; 
     }; 

Testdata

/// <summary> 
/// Summary <- skips this one 
/// </summary> 

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

+0

Какая строка пропускается? Дайте более точное описание вашей проблемы, включая данные теста и желаемый результат. –

+0

Что значит линия пропущена? Есть ли строка, которая не отображается? Или отображается отображение каретки, вызывающее перерыв на дисплее? Если бы вы могли предоставить образец ввода и вывода, это поможет. –

+0

Aha ok, я играю с регулярными выражениями, и я использую файл кода для pratice на зависании на плохой смене темы –

ответ

6

Никогда не изменяйте коллекцию, которую вы в настоящее время итерируете. Сначала создайте копию коллекции, в вашем случае сделайте следующее небольшое изменение:

foo.ToList().ForEach(... 
+0

Хорошо, что сработало .. Чувство, похоже, глупо сейчас: p –