Можно ли использовать foreach в одном и том же IEnumerable дважды или более внутри метода с выходом?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли использовать foreach в одном и том же IEnumerable дважды или более внутри метода с выходом?

Сообщение Anonymous »

Очень простой случай: у меня есть список элементов (1, 2, 3, 4, 5, 6, 7, 8, 9, 10). Мне нужно отфильтровать его и удалить несколько первых элементов и несколько последних элементов, а также получить несколько элементов из середины (например, мне нужно получить (5, 6, 7, 8)).
Я написал этот метод:
IEnumerable GetCapturedTimeLapsesWithRatios(IEnumerable allTimeLapsesProfitabilitiesResult, int from, int to)
{
foreach (var item in allTimeLapsesProfitabilitiesResult)
{
if (item = to)
{
Console.WriteLine("if (item >= to) " + item);
yield return item;
yield break;
}
else
{
Console.WriteLine("else " + item);
yield return item;
break;
}
}
}

foreach (var item in allTimeLapsesProfitabilitiesResult)
{
if (item < to)
{
Console.WriteLine("if (item < to) " + item);
yield return item;
}
else
{
Console.WriteLine("else " + item);
yield return item;
yield break;
}
}
}

GetCapturedTimeLapsesWithRatios(new List() {0,1,2,3,4,5,6,7,8,9,10 }, 4, 8);

И я получаю совершенно неверный результат:
{ 5, 0, 1, 2, 3, 4, 5, 6, 7, 8 }

и консоль отображает больше строк, чем я ожидал
0
1
2
3
4
else 5
if (item < to) 0 // wrong line
if (item < to) 1 // wrong line
if (item < to) 2 // wrong line
if (item < to) 3 // wrong line
if (item < to) 4 // wrong line
if (item < to) 5 // wrong line
if (item < to) 6
if (item < to) 7
else 8

Я вижу, что второй foreach начал итерацию с элемента "0", но я ожидал, что он начнет итерацию с элемента "6", потому что первый foreach обработал первые 5.
Итак, есть ли способ использовать foreach несколько раз (каждый foreach с разной фильтрацией) в одном и том же IEnumerable внутри метода с доходностью? Или, может быть, я делаю это неправильно?
PS: приведенный выше код — пустышка, потому что мой реальный код более сложен, поэтому я не могу использовать только стандартные методы LINQ, такие как
new List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
.SkipWhile(i => i i

Подробнее здесь: https://stackoverflow.com/questions/793 ... inside-a-m
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»