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

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

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

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

Ответы [ 3 ]

23 голосов
/ 21 июля 2011

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

var sorted = objects.OrderBy(o => o.Member == null).ThenBy(o => o.Member);
18 голосов
/ 21 июля 2011

Из MSDN для IComparable :

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

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

5 голосов
/ 21 июля 2011

Один из вариантов - использовать перегрузку OrderBy, которая принимает IComparer , и реализовать ее самостоятельно для кодификации этого ожидания:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...