Ответ 1
Порядок зависит от используемой вами культуры.
Вы можете передать культуру в перегрузке в OrderBy.
var sorted = strings2.OrderBy(x => x, StringComparer.InvariantCulture)
Рассмотрим этот код
var strings2 = new List<string>
{
"0", // Ascii code 48 (decimal)
"|" // Ascii code 125 (decimal)
};
var sorted = strings2.OrderBy(x => x).ToArray();
Сортировка содержит "|", "0"
. Теперь рассмотрим этот код (все, что я сделал, это изменить "|"
на "."
)
var strings2 = new List<string>
{
"0", // Ascii code 48 (decimal)
"." // Ascii code 46 (decimal)
};
var sorted = strings2.OrderBy(x => x).ToArray();
Теперь отсортировано содержит ".", "0"
В обоих случаях "0"
приходит в конце, хотя 125 > 48, что здесь происходит?
Порядок зависит от используемой вами культуры.
Вы можете передать культуру в перегрузке в OrderBy.
var sorted = strings2.OrderBy(x => x, StringComparer.InvariantCulture)
Здесь вы идете:
Сравнение использует текущую культуру для получения специфических для культуры информации, такой как правила обсадной колонны и алфавитный порядок индивидуальные символы. Например, культура может указать, что некоторые комбинации символов рассматриваются как один символ, или символы верхнего и нижнего регистра сравниваются определенным образом, или что порядок сортировки персонажа зависит от символов которые предшествуют или следуют за ним.
В функции ".OrderBy" используется сопоставитель по умолчанию для строки. Этот компаратор не обязательно будет возвращать порядок сортировки на основе кода ASCII.
Список всех различных сопоставлений строк см. в статье MSDN.