К сожалению, нет перегрузки Sum
, которая принимает IEnumerable<TimeSpan>
. Кроме того, в настоящее время не существует способа указания основанных на операторе обобщенных ограничений для параметров типа, поэтому, хотя TimeSpan
суммируется «изначально», этот факт не может быть легко обнаружен универсальным кодом.
Одним из вариантов будет, как вы говорите, вместо этого суммировать целочисленный тип, эквивалентный временному интервалу, а затем снова превратить эту сумму в TimeSpan
. Идеальным свойством для этого является TimeSpan.Ticks
, которое точно совершает круговую поездку. Но совсем не обязательно менять тип свойства вашего класса; Вы можете просто проект :
var totalSpan = new TimeSpan(myCollection.Sum(r => r.TheDuration.Ticks));
В качестве альтернативы, если вы хотите придерживаться оператора +
TimeSpan для суммирования, вы можете использовать оператор Aggregate
:
var totalSpan = myCollection.Aggregate
(TimeSpan.Zero,
(sumSoFar, nextMyObject) => sumSoFar + nextMyObject.TheDuration);