Если я выполню следующий оператор:
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Результат равен "-1", что указывает, что "mun" имеет меньшее числовое значение, чем "mün".
Однако, если я выполню это утверждение:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
Я получаю "1", указывая, что "Muntelier, Schewiz" должен длиться последним.
Это ошибка в сравнении? Или, скорее, есть правило, которое я должен учитывать при сортировке строк, содержащих акцентированные
Причина в том, что это проблема, я сортирую список, а затем выполняю ручной двоичный фильтр, который означает, что каждая строка начинается с "xxx".
Раньше я использовал метод Linq 'Where', но теперь я должен использовать эту настраиваемую функцию, написанную другим человеком, потому что он говорит, что она работает лучше.
Но пользовательская функция, похоже, не учитывает любые правила unicode.NET. Поэтому, если я скажу, что он фильтрует "mün", он не находит никаких элементов, даже если в списке есть элементы, начинающиеся с "mun".
Это, по-видимому, из-за несогласованного упорядочения акцентированных символов, в зависимости от того, какие символы идут после акцентированного символа.
Хорошо, я думаю, что исправил проблему.
Перед фильтром я делаю сортировку на основе первых n букв каждой строки, где n - длина строки поиска.