Неожиданный порядок строк, если строка содержит два последовательных знака минуса
Дано следующее небольшое консольное приложение.net:
var names = new[] { "foo-018", "foo-033", "foo--03", "c", "b", "a" };
var ordered = names.OrderBy(n => n, StringComparer.InvariantCultureIgnoreCase);
Console.WriteLine(String.Join(", ", ordered));
Ожидаемый результат ИМХО будет одним из следующих двух:
a, b, c, foo-018, foo-033, foo--03
a, b, c, foo--03, foo-018, foo-033
К сожалению, я получаю следующий вывод:
a, b, c, foo-018, foo--03, foo-033
Итак, почему foo--03
отсортированы между двумя другими элементами только с одним знаком минус?
Если я заменю компаратор против StringComparer.OrdinalIgnoreCase
Я получу одно из своих ожиданий, но почему сортирует агностик-культуролога таким образом? Я старался "en"
, "de"
, "fr"
все они производят один и тот же странный порядок, только порядковый соответствует моей ментальной модели.
Кстати, все вышеперечисленные символы являются простыми ASCII-символами, никакой магии Unicode не задействовано, и я запустил программу с.Net Core 2.0 и Framework 4.6.2, получив те же результаты.