【发布时间】:2011-07-01 16:44:55
【问题描述】:
以不同方式处理第一个 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 的情况)。
如果你需要围绕你的代码做几次,你会怎么做?
【问题讨论】:
标签: linq ienumerable skip