Каждое предложение «let» добавляет дополнительный уровень делегирования. Вы можете улучшить некоторые вещи, удалив их. Вам также не нужен анонимный тип - или, возможно, вызов ToList()
. Кроме того, нет смысла каждый раз звонить ToOADate()
на maxDate
.
public static IEnumerable<T> OrderByAncesty<T>(this IEnumerable<T> source,
Func<T, DateTime> dateSelector, Func<T, float> scoreSelector)
{
var maxDate = (float) source.Max(dateSelector).ToOADate();
return original.OrderBy(p =>
(1 - (float)dateSelector(p).ToOADate() / maxDate))
* scoreSelector(p));
}
Заметьте, что это ясно, без предложений "let", заметьте.