Важна ли для сравнения информация о культуре строк, если пользователь никогда не изменит эти строки?
При сравнении жестко закодированных строк, которые пользователь увидит, но не изменит / изменит, важна информация о культуре.
Я бы предположил, что нет, но я просто хочу быть в безопасности.
Пример:
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
идентичны, тогда как в США они идентичны.