У меня трудное время с, казалось бы, легкой и смущающей проблемой. Все, что я хочу, это следующий элемент в 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 Извините за плохой каламбур.)