Почему 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 длина строки поиска.

Ответы на вопрос(3)

Ваш ответ на вопрос