Что будет Самый элегантный способ обработать первый элемент IEnumerable иначе, чем другие, без необходимости тестирования на каждой итерации?
С тестом на каждой итерации, это будет выглядеть так:
// "first item done" flag
bool firstDone = false;
// items is an IEnumerable<something>
foreach (var item in items)
{
if (!firstDone)
{
// do this only once
ProcessDifferently(item);
firstDone = true;
continue;
}
ProcessNormally(item);
}
Если я сделаю это:
ProcessDifferently(items.First());
ProcessNormally(items.Skip(1)); // this calls `items.GetEnumerator` again
it вызовет GetEnumerator
дважды, чего я бы хотел избежать (например, для случаев преобразования Linq-to-Sql).
Как бы вы это сделали, если вам нужно сделать несколько раз вокруг своего кода?