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