Ответ 1
Вы можете использовать метод среднего расширения:
double doubleAverageTicks = sourceList.Average(timeSpan => timeSpan.Ticks);
long longAverageTicks = Convert.ToInt64(doubleAverageTicks);
return new TimeSpan(longAverageTicks);
У меня есть коллекция 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());
}
Вы можете использовать метод среднего расширения:
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, если исходный список пуст, в этом случае сначала выполните отдельную проверку.
В дополнение к вышеприведенному ответу я бы посоветовал вам взять среднее значение на уровне секунд или миллисекунд (в зависимости от того, что вам требуется)
sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)
Теперь, используя это значение, вы можете перейти на новый интервал времени, используя
TimeSpan avg = TimeSpan.FromMilliseconds(double value here)