Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, varenikAA, Вы писали:
AA>>Почему переусложнил? Есть последовательность элементов, нужно выполнить над определенными элементами AA>>какое-то действие, при этом еще нужно знать позицию в исходной коллекции.
НС>Для этого есть Select с индексом.
Ну в исходном сообщении использовался Select c индексом. Получился бред.
вообще надо было так писать:
foreach (var (item, index) in Enumerable.Range(1, 10).WithIndex())
{
if (item % 2 == 0)
Console.WriteLine($"{index} = {item}");
}
public static IEnumerable<(T Item, int Index)> WithIndex<T>(this IEnumerable<T> items)
{
var index = 0;
foreach (var item in items)
{
yield return (item, index++);
}
}
Enumerable.Range(1, 10)
.Select((v, i) => new { i, v })
.Where(e => e.v % 2 == 0)
.ToList() // Приходится использовать явную материализацию, иначе все эти вызовы не будут выполнены
.ForEach(e => Console.WriteLine($"{e.i} = {e.v}"));
S>Enumerable.Range(1, 10)
S> .Select((v, i) => new { i, v })
S> .Where(e => e.v % 2 == 0)
S> .ToList() // Приходится использовать явную материализацию, иначе все эти вызовы не будут выполнены
S> .ForEach(e => Console.WriteLine($"{e.i} = {e.v}"));
S>
Или так:
Enumerable.Range(1, 10)
.Select((v, i) => new { i, v })
.Where(e => e.v % 2 == 0)
.Count(e => { Console.WriteLine($"{e.i} = {e.v}"); return true; });