private void Do()
{
int linqCounter = 0;
var source = new List<byte> { 0, 0, 1, 0, 1 };
var bytes = source.Where(x =>
{
linqCounter ++;
return x > 0;
});
if (bytes.First() == bytes.Last())
{
Console.WriteLine(linqCounter--);
}
else
{
Console.WriteLine(linqCounter++);
}
}
почему этот код выводит 8 ?
Выше причину объяснили, но если разобраться охота, пройдите код в отладчике по шагам и будет понятно. При каждом вызове bytes.First() или bytes.Last() вызывается анонимная функция внутри Where. Таким образом счётчик увеличивается до 3 в bytes.First() (т.к. первая 1 - на 3 позиции), и прибавляется ещё 5 при вызове bytes.Last(). Всего 8