最初の 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
2回呼び出されますが、これは避けたいと思います(たとえば、Linq-to-Sqlの場合)。
コードを何度も実行する必要がある場合、どのようにしますか?