Enumerable OrderBy - это нулевые значения, которые всегда обрабатываются как с высокой, так и с низкой, и можно ли считать это стабильным?

Я сортирую некоторые IEnumerable объектов:

var sortedObjects = objects.OrderBy(obj => obj.Member)

Где Member имеет тип IComparable. Кажется, что этот тип помещает объекты с obj.Member == null вверху. Это примерно то поведение, которое я хочу, но могу ли я считать это стабильным в отношении будущих .NET-фреймворков? Есть ли способ сделать это поведение "nulls are low" более явным?

Ответ 1

Чтобы сделать поведение более явным:

var sorted = objects.OrderBy(o => o.Member == null).ThenBy(o => o.Member);

Ответ 2

Из MSDN для IComparable:

По определению любой объект сравнивается больше (или следует) null, и две нулевые ссылки сравниваются друг с другом.

Таким образом, нулевой объект считается меньше, чем ненулевой объект. Если сортировка по возрастанию, вы сначала получите нули.

Ответ 3

Один из вариантов заключается в использовании перегрузки OrderBy, который принимает IComparer <T> и реализует его самостоятельно, чтобы кодифицировать это ожидание:

http://msdn.microsoft.com/en-us/library/bb549422.aspx