Самый элегантный способ обработать первый элемент IEnumerable по-другому

Что будет Самый элегантный способ обработать первый элемент 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).

Как бы вы это сделали, если вам нужно сделать несколько раз вокруг своего кода?

7
задан dilbert 1 July 2011 в 17:06
поделиться