각 반복에서 테스트하지 않고 첫 번째 IEnumerable 항목을 다른 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);
}
을 내가 할 경우이 : 그것은 내가 피하고자하는, 두 번 GetEnumerator
를 호출합니다
ProcessDifferently(items.First());
ProcessNormally(items.Skip(1)); // this calls `items.GetEnumerator` again
(대한 예를 들어 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