Должен ли я использовать '==' для сравнения локализованных строк .NET? - PullRequest
11 голосов
/ 18 ноября 2011

По каким причинам не следует использовать "==" для сравнения локализованных строк в .NET? Как будет выполняться сравнение по отношению к CultureInfo, если я его использую?

Ответы [ 3 ]

14 голосов
/ 18 ноября 2011

Если вы сравниваете строки с учетом культуры с ==, например, "Strasse" с "Straße", возвращается false.

Если вам нужны сравнения с учетом культуры для содержимого пользовательского интерфейса (сортировка списка), вы используете String.Compare с соответствующим CultureInfo.

CultureInfo ci = new CultureInfo("de-DE");
String.Compare("Strasse", "Straße", true, ci) // Returns zero
10 голосов
/ 18 ноября 2011

Перегруженный String.operator == будет выполнять неопознанное порядковое сравнение - он сравнивает байты строк за байтом, используя сильно оптимизированный развернутый цикл .
Он вызывает ту же внутреннюю функцию, что и String.Equals(a, b, StringComparison.Ordinal)

10 голосов
/ 18 ноября 2011

== нечувствителен к культуре - это простое порядковое сравнение.Таким образом, две строки, которые культурно равны или даже равны с точки зрения других форм канонизации, могут не быть равными через ==.Он в основном обрабатывает каждую строку как массив char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...