Опции перечисления StringComparison - PullRequest
37 голосов
/ 23 февраля 2012

Меня смущают параметры StringComparison Enumeration . Я просто хочу сравнить две строки без учета регистра. Может кто-нибудь объяснить, что означают термины текущая культура , инвариантная культура и порядковый номер ? Существует ли опция, общая для большинства случаев использования, и если да, то при каких обстоятельствах понадобятся другие опции?

Для справки, параметры перечисления StringComparison следующие:

  • CurrentCulture
  • CurrentCultureIgnoreCase
  • InvariantCulture
  • InvariantCultureIgnoreCase
  • Порядковый
  • OrdinalIgnoreCase

Ответы [ 2 ]

43 голосов
/ 23 февраля 2012

Если вы сравниваете две строки на равенство, то настройки культуры не имеют большого значения (хотя это влияет, например, на турецкий язык, у которого пунктирная и точечная буквы).

Если вы сортируете список строк, есть большая разница; разные культуры часто сортируются в разных порядках.

CurrentCulture сортирует строки в соответствии с текущей культурой (т.е. текущей локалью). Так что это меняется в зависимости от того, где запущено ваше программное обеспечение.

InvariantCulture - это, в основном, настройки английского США. Он инвариантен, потому что он одинаков везде, где работает ваше программное обеспечение.

Порядковые сравнения основаны на значениях кодовых точек Unicode. Обычно это лучший выбор для сравнения равенства, но не лучший выбор, если вы сортируете список строк для отображения пользователю.

3 голосов
/ 23 февраля 2012

См. http://blogs.msdn.com/b/abhinaba/archive/2005/10/28/486173.aspx и http://msdn.microsoft.com/en-us/library/ms973919. Рекомендуется использовать ординальные * методы.

...