Важна ли для сравнения информация о культуре строк, если пользователь никогда не изменит эти строки?

При сравнении жестко закодированных строк, которые пользователь увидит, но не изменит / изменит, важна информация о культуре.

Я бы предположил, что нет, но я просто хочу быть в безопасности.

Пример:

static void Main()
{
    string hardString = "IAMHardCodei";
    string hardString2 = "IamHardCodei";
    //Compare hardString and hardString2, ignoring case, 
    //and then do stuff based on that result
}

3 ответа

Решение

Общая рекомендация для сравнения строк, когда они являются "только программными строками" (то есть, как вы указали, они не могут использоваться или редактироваться пользователем напрямую, это: StringComparison.Ordinal[IgnoreCase],

См. Этот пост SO (который, вероятно, является дубликатом): Что обычно лучше всего использовать - StringComparison.OrdinalIgnoreCase или StringComparison.InvariantCultureIgnoreCase?

Ты можешь использовать InvariantCultureIgnoreCase для сравнения

hardString.Equals(hardString2, StringComparison.InvariantCultureIgnoreCase);

Правила культуры актуальны даже для жестко закодированных строк, если вы полагаетесь на значение по умолчанию CurrentCulture когда делаю сравнения. Вот пример учебника из документации MSDN:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US")
Debug.Assert("file" == "FILE".ToLower()); // Passes

Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
Debug.Assert("file" == "FILE".ToLower()); // Fails

С учетом нечувствительности к регистру компьютеры ваших пользователей в Турции не думают file а также FILE идентичны, тогда как в США они идентичны.

Другие вопросы по тегам