Ответ 1
Чтобы сделать поведение более явным:
var sorted = objects.OrderBy(o => o.Member == null).ThenBy(o => o.Member);
Я сортирую некоторые IEnumerable
объектов:
var sortedObjects = objects.OrderBy(obj => obj.Member)
Где Member имеет тип IComparable
. Кажется, что этот тип помещает объекты с obj.Member == null
вверху. Это примерно то поведение, которое я хочу, но могу ли я считать это стабильным в отношении будущих .NET-фреймворков? Есть ли способ сделать это поведение "nulls are low" более явным?
Чтобы сделать поведение более явным:
var sorted = objects.OrderBy(o => o.Member == null).ThenBy(o => o.Member);
Из MSDN для IComparable:
По определению любой объект сравнивается больше (или следует) null, и две нулевые ссылки сравниваются друг с другом.
Таким образом, нулевой объект считается меньше, чем ненулевой объект. Если сортировка по возрастанию, вы сначала получите нули.
Один из вариантов заключается в использовании перегрузки OrderBy, который принимает IComparer <T> и реализует его самостоятельно, чтобы кодифицировать это ожидание: