Как сравнивать персонажей (уважая культуру) - PullRequest
6 голосов
/ 21 мая 2010

Для моего ответа в этот вопрос Я должен сравнить два символа. Я думал, что обычный метод char.CompareTo () позволит мне указать CultureInfo , но это не так.

Итак, мой вопрос: Как сравнить два символа и указать для сравнения CultureInfo?

Ответы [ 4 ]

4 голосов
/ 21 мая 2010

Существует действительно разница между сравнением символов и строк. Позвольте мне попытаться объяснить основную проблему, которая довольно проста: символ всегда представляет одну точку Unicode. Сравнение символов всегда сравнивает кодовые точки без учета их одинакового значения.

Если вы хотите сравнить символы на одинаковое значение, вам нужно создать строку и использовать предоставленные там методы сравнения. К ним относится поддержка разных культур. Смотрите ответ Гуффы о том, как это сделать.

4 голосов
/ 21 мая 2010

Сравнение символов не включено, необходимо преобразовать символы в строки, чтобы можно было использовать, например, метод String.Compare(string, string, CultureInfo, CompareOptions).

Пример:

char a = 'å';
char b = 'ä';

// outputs -1:
Console.WriteLine(String.Compare(
  a.ToString(),
  b.ToString(),
  CultureInfo.GetCultureInfo("sv-SE"),
  CompareOptions.IgnoreCase
));

// outputs 1:
Console.WriteLine(String.Compare(
  a.ToString(),
  b.ToString(),
  CultureInfo.GetCultureInfo("en-GB"),
  CompareOptions.IgnoreCase
));
2 голосов
/ 21 мая 2010

Вы пробовали String.Compare Метод?

Сравнение использует текущую культуру для получения специфической для культуры информации, такой как правила ввода в регистр и алфавитный порядок отдельных символов. Например, культура может указывать, что определенные комбинации символов должны обрабатываться как один символ, или символы верхнего и нижнего регистра должны сравниваться определенным образом, или что порядок сортировки символа зависит от символов, предшествующих или следующих за ним.

String.Compare(str1, str2, false, new CultureInfo("en-US"))
1 голос
/ 21 мая 2010

Я не думаю, что cultureInfo имеет значение при сравнении символов в C #. char уже является символом Unicode, поэтому два символа легко сравнивать без CultureInfo.

...