查找TimeSpans集合的平均值

时间:2012-01-13 08:19:31

标签: c# average timespan

我有TimeSpans的集合,它们代表完成任务所花费的时间。现在我想找到在该任务上花费的平均时间。它应该很容易,但由于某种原因,我没有得到正确的平均值。

这是我的代码:

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());
}

3 个答案:

答案 0 :(得分:88)

您可以使用带有long参数集合的Average overload

double doubleAverageTicks = sourceList.Average(timeSpan => timeSpan.Ticks);
long longAverageTicks = Convert.ToInt64(doubleAverageTicks);

return new TimeSpan(longAverageTicks);

答案 1 :(得分:12)

var average = new TimeSpan(sourceList.Select(ts => ts.Ticks).Average());

注意,您的方法返回Nullable,但不需要,除非您想要在源列表为空时返回null,在这种情况下,只需先进行单独的检查。

答案 2 :(得分:3)

除上述答案外,我建议您在秒或毫秒级别上取平均值(取决于您的要求)

sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)

现在使用此值,您可以使用

到达新的TimeSpan
TimeSpan avg = TimeSpan.FromMilliseconds(double value here)