Да, ты переутомился, поспи! : D
Предполагая, что вы можете с уверенностью сказать, что ваш массив содержит последовательные пары входов / выходов (или аналогичные, например, парные входы / выходы, время запуска / остановки и т. Д.), Вы также можете предположить, что массив содержит четное количество записей (или, в худшем случае, если в конце есть нечетная запись, которая вас не волнует).
В этом случае вам просто нужно пропустить на 2:
TimeSpan totalTime = new TimeSpan();
for (int i = 0; i < worked.Count - 1; i += 2) // Notice we're incrementing by 2 now
{
totalTime = totalTime.Add(worked[i + 1].Time - worked[i].Time);
}
Очевидно, что это ужасно падает, если у вас есть несовпадающие пары: скажем, кто-то забывает отключить или выключить дважды, или в результате запроса, который вы используете, выбирается «время выключения» в первый раз, а затем следующий » часы в "- в этом случае вы будете измерять время между синхронизированными временами. Просто будьте очень осторожны с данными, которые вы извлекаете.
Если есть способ извлечения в отдельные массивы для входов и выходов, это сделало бы гораздо более надежное решение, но агрегация времени становится намного сложнее, потому что вы должны разработать конкретные правила о том, что произойдет, если отдельные события отсутствуют или кратны. Но это обсуждение другого вопроса, если до этого дойдет.