查找时间段收集的平均值

我有时间收集,他们代表了花在做任务的时间。 现在我想找出在这个任务上花费的平均时间。 这应该很容易,但由于某种原因我没有得到正确的平均值。

下面是即将做的事情:

private TimeSpan? GetTimeSpanAverage(List<TimeSpan> sourceList) { TimeSpan total = default(TimeSpan); var sortedDates = sourceList.OrderBy(x => x); foreach (var dateTime in sortedDates) { total += dateTime; } return TimeSpan.FromMilliseconds(total.TotalMilliseconds/sortedDates.Count()); } 

您可以使用在参数中使用长整型的Average超载 。

 double doubleAverageTicks = sourceList.Average(timeSpan => timeSpan.Ticks); long longAverageTicks = Convert.ToInt64(doubleAverageTicks); return new TimeSpan(longAverageTicks); 
 var average = new TimeSpan(sourceList.Select(ts => ts.Ticks).Average()); 

注意,你的方法返回一个Nullable ,但是不需要,除非你想在源列表为空的情况下返回null,在这种情况下只需要先做一个单独的检查。

除了上面的答案,我build议你采取平均秒或毫秒级(取决于你所需要的)

 sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds) 

现在使用这个值,你可以使用新的TimeSpan

 TimeSpan avg = TimeSpan.FromMilliseconds(double value here)