Альтернатива IEnumerable .Skip (1) .Take (1) .Single ()

У меня трудное время с, казалось бы, легкой и смущающей проблемой. Все, что я хочу, это следующий элемент в IEnumberable без использования Skip (1) .Take (1) .Single (). Этот пример иллюстрирует основную проблему.

private char _nextChar;
private IEnumerable<char> getAlphabet()
{
    yield return 'A';
    yield return 'B';
    yield return 'C';
}
public void sortAlphabet()
{
     foreach (char alpha in getAlphabet())
     {
         switch (alpha)
         {
             case 'A':  //When A pops up, I want to get the next element, ie 'B'
                 _nextChar = getAlphabet().Skip(1).Take(1).Single();
                 break;
             case 'B': //When B pops up, I want 'C' etc
                 _nextChar = getAlphabet().Skip(1).Take(1).Single();
                 break;
         }
     }
}

Этот пример работает не только безобразно. Но допустим, что IEnumerable содержит 2 миллиона элементов, а затем оператор LINQ делает программу невыносимо медленной. То, что я хочу, просто. Я просто хочу следующий элемент в IEnumberable <>. Все мои проблемы были бы решены, если бы существовала такая функция, как:

_nextChar = getAlphabet().moveNext() //or getNext()

Было бы гораздо предпочтительнее, если бы решение сохраняло ту же структуру / компоновку / функциональность, что и в примере, однако я гибок. Моя программа - это анализатор файлов, и среди 2 миллионов строк текста есть такие ключи, как «money = 324», где «money» и «324» являются соседними элементами в IEnumberable, и когда парсер встречает «money», я хочу «324». (а кто нет?: D Извините за плохой каламбур.)

5
задан Nick Babcock 28 August 2010 в 15:34
поделиться