Очень простой случай: у меня есть список элементов (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#
Место общения программистов C#
1736292106
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79337574/is-it-possible-to-use-foreach-on-the-same-ienumerable-twice-or-more-inside-a-m[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия