Приведение a.Start - b.Start
к int, похоже, работает здесь, однако, делая это, вы подвергаете себя ошибкам переполнения (что если, например, a.Start
равно 0 и b.Start
равно long.MaxValue
, например?). Поскольку Sort
только проверяет, возвращает ли ваша лямбда положительное значение, отрицательное значение или ноль, вы можете сделать следующее:
ranges.Sort((a, b) => a.Start > b.Start ? 1 : a.Start < b.Start ? -1 : 0);
В качестве альтернативы, LINQ OrderBy
работает просто отлично (и не ограничивается List
с), но имейте в виду, что он возвращает новый объект, а не изменяет исходный, что может быть вам может не подойти:
ranges = ranges.OrderBy(r => r.Start).ToList()