最初の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の場合など)。
コードを何回か実行する必要がある場合はどうすればよいですか?
public void Process<T>(IEnumerable<T> source,
Action<T> firstAction,
Action<T> remainderAction)
{
// TODO: Argument validation
using (var iterator = source.GetEnumerator())
{
if (iterator.MoveNext())
{
firstAction(iterator.Current);
}
while (iterator.MoveNext())
{
remainderAction(iterator.Current);
}
}
}
として呼び出されます:私はいくつかの場所でそれを行うために必要な場合
ありがとうございます。きれいで清潔です。私が尋ねたことを正確に行います。 – dilbert