Почему string.Compare, кажется, обрабатывает символы с акцентом непоследовательно?
Если я выполню следующее утверждение:
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', но теперь я должен использовать эту пользовательскую функцию, написанную другим человеком, потому что он говорит, что она работает лучше.
Но пользовательская функция, по-видимому, не учитывает какие-либо «юникодные» правила .NET. Поэтому, если я скажу ему выполнить фильтрацию по 'mün', он не найдет никаких элементов, даже если в списке есть элементы, начинающиеся с 'mun'.
Кажется, это из-за непоследовательного упорядочения акцентированных символов, в зависимости от того, какие символы идут после акцентированного символа.
ОК, я думаю, что я исправил проблему.
Перед фильтром я делаю сортировку на основе первогоn буквы каждой строки, гдеn длина строки поиска.