Информация об изменениях

Сообщение Re: .NET и юникод от 28.01.2024 19:31

Изменено 28.01.2024 21:20 m2user

Re: .NET и юникод
Поведение конечно неожиданно. Но что ты хотел получить сравнивая строки без указания культуры
MS везде (в частности в code anlysis) пишет о том, что так делать не стоит.
Хотя бы потому, что если культура не указана, то берётся текущая локаль потока выполнения, которая в свою очередь зависит от локали процесса/пользователя/машины.
И может быть совсем не такой, какую ожидает разработчик.
Re: .NET и юникод
Поведение конечно неожиданно. Но что ты хотел получить сравнивая строки без указания культуры
MS везде (в частности в code anlysis) пишет о том, что так делать не стоит.
Хотя бы потому, что если культура не указана, то берётся текущая локаль потока выполнения, которая в свою очередь зависит от локали процесса/пользователя/машины.
И может быть совсем не такой, какую ожидает разработчик.

Дополню: CA rules по глобализации: https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/globalization-warnings

Best practices for comparing strings in .NET

Comparisons that use current culture semantics are the default for the following methods:

String.Compare overloads that don't include a StringComparison parameter.
String.CompareTo overloads.
The default String.StartsWith(String) method, and the String.StartsWith(String, Boolean, CultureInfo) method with a nullCultureInfo parameter.
The default String.EndsWith(String) method, and the String.EndsWith(String, Boolean, CultureInfo) method with a nullCultureInfo parameter.
String.IndexOf overloads that accept a String as a search parameter and that don't have a StringComparison parameter.
String.LastIndexOf overloads that accept a String as a search parameter and that don't have a StringComparison parameter.


Ordinal semantics are the default for String.Equals overloads that don't include a StringComparison argument (including the equality operator).


Т.е. результат String.StartsWith зависит от локали потока выполнения, и только по коду однозначно ответить нельзя.