2015-04-25 1 views
1

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

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

Пример:

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

Это всегда важно, даже если пользователь не видит и не изменяет его. Все зависит от того, какие данные вы манипулируете. –

+0

@ThomasLevesque Я добавил пример, чтобы быть более понятным. Значения жестко закодированы мной – JackBarn

+0

Что делать, если две строки не равны, скажем, китайцы? Здесь не так, но в зависимости от строк это может быть. – dman2306

ответ

0

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

Посмотрите этот SO пост (из которых это, вероятно, дубликат): Which is generally best to use -- StringComparison.OrdinalIgnoreCase or StringComparison.InvariantCultureIgnoreCase?

+0

[Все зависит от вас] (http://stackoverflow.com/a/6406284/213550) :) – VMAtm

+0

@VMAtm Это всегда зависит от очень конкретных потребностей в реализации, поэтому я префиксировал его: «Общая рекомендация». :) – CodingGorilla

1

Правила культуры применимы даже для жестко закрепленных строк, если вы полагаетесь на значение по умолчанию 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 идентичны, в то время как в США они идентичны.

Смежные вопросы