Нестабильная сортировка означает, что цепочка вызовов x.OrderBy(...).OrderBy(...)
будет надежно сортироваться только в соответствии с окончательным критерием. x.OrderBy(...).ThenBy(...)
явно фиксирует знание предыдущего порядка сортировки при применении нового порядка сортировки. Я полагаю, что это происходит с помощью вызова IOrderedEnumerable<TElement>.CreateOrderedEnumerable<TKey>
, хотя я не уверен на 100% в этом.
РЕДАКТИРОВАТЬ: Просто чтобы прояснить, когда я говорю, «захватывает знания ...», я не хочу сказать, что первый OrderBy выполняет сортировку, и каким-то образом второй знает, что он сделал. Помните, что OrderBy
возвращает IOrderedEnumerable<T>
, который вообще не выполняет никакой работы, пока кто-то не попытается использовать элементы. В этом сценарии он никогда не выполнит сортировку, поскольку ThenBy
, используя знания о том, как OrderBy
отсортировал бы , создает новый сортировщик, который применяет оба порядка сортировки ожидаемым образом и один шаг.
Было отмечено, что Магеннис ошибается в отношении нестабильной сортировки. Приведенное выше описание все еще действует, однако.