Очень простой случай: у меня есть список элементов (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
Можно ли использовать foreach в одном и том же IEnumerable дважды или более внутри метода с выходом? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение