查找TimeSpans集合的平均值

hs2*_*s2d 49 c# timespan average

我收集了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());
}
Run Code Online (Sandbox Code Playgroud)

vc *_* 74 92

您可以使用带有long参数集合的Average重载.

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

return new TimeSpan(longAverageTicks);
Run Code Online (Sandbox Code Playgroud)


Geo*_*ett 11

var average = new TimeSpan(sourceList.Select(ts => ts.Ticks).Average());
Run Code Online (Sandbox Code Playgroud)

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

  • 没有返回“long”值的“Enumerable.Average()”重载,也没有接受 double 作为参数的 TimeSpan 构造函数,因此该示例不是为我构建的。为了使其编译,我被迫添加参数的显式转换“(long)”:“var Average = new TimeSpan((long)sourceList.Select(ts =&gt; ts.Ticks).Average());” (5认同)