В чем причина не использовать "==" для сравнения локализованных строк в .NET? Как бы сравнение выполнялось в отношении CultureInfo, если я его использую?
Должен ли я использовать '==' для локализованных сопоставлений строк .NET?
Ответ 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)