public class LogTime
{
public uint TotalMs { get; protected set; }
// и другие
}
LogTime GetMax(List<LogTime> Times)
{
if (Times == null) return null;
LogTime logMax = Times[0]
foreach (var t in Times)
{
if( t.TotalMs > logMax.TotalMs)
logMax = t;
}
retutn logMax;
}
Как сделать ф-цию красивее?
Подключите NuGet-пакет morelinq, тогда можно будет написать так:
LogTime GetMax(List<LogTime> Times) => Times?.MaxBy(t => t.TotalMs);
MoreEnumerable.MaxBy
Можно воспользоваться методом Aggregate, это позволит свернуть последовательность в один элемент:
LogTime GetMax(List<LogTime> Times)
{
return Times?.Aggregate(Times.FirstOrDefault(), (a, b) => a.TotalMs > b.TotalMs ? a : b);
}
Также можно сделать более общее решение, напоминающее .MaxBy, для этого нужно сделать данную функцию расширением для IEnumerable<T>
public static class Ext
{
public static T GetMax<T, TProp>(this IEnumerable<T> source, Func<T, TProp> fun) where TProp : IComparable<TProp> => source.Any() ? source.Aggregate(source.FirstOrDefault(), (a, b) => fun(a).CompareTo(fun(b)) > 0 ? a : b) : default;
}
Тогда ее можно будет вызывать аналогично соседнему ответу:
Times.GetMax(t => t.TotalMs)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости