Должен ли я использовать '==' для локализованных сопоставлений строк .NET?

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

Ответ 1

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

Ответ 2

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

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

CultureInfo ci = new CultureInfo("de-DE");
String.Compare("Strasse", "Straße", true, ci) // Returns zero

Ответ 3

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