Что может быть самым элегантным способом обработки первого элемента 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
дважды вызовет GetEnumerator
, чего я хотел бы избежать (например, для случаев Linq-Sql).
Как бы вы это сделали, если вам нужно сделать несколько раз вокруг вашего кода?