Изменение регистра без учета языка и региональных параметров
Методы String.ToUpper, String.ToLower, Char.ToUpper и Char.ToLower предоставляют перегрузки, которые не принимают параметры. По умолчанию эти перегрузки без параметров выполняют изменения регистра на основе значения CultureInfo.CurrentCulture. Результат преобразования чувствителен к регистру и может быть разным для языков и региональных параметров. Чтобы четко указать, нужно ли учитывать язык и региональные параметры при изменении регистра, используйте перегрузки этих методов, принимающие параметр culture
явным образом. Чтобы изменить регистр с учетом языка и региональных параметров, укажите значение CultureInfo.CurrentCulture
для параметра culture
. Чтобы изменить регистр без учета языка и региональных параметров, укажите значение CultureInfo.InvariantCulture
для параметра culture
.
Обычно строки преобразуются в стандартный регистр, чтобы упростить поиск по этим значениям. Если вы намерены применить такой подход, укажите значение CultureInfo.InvariantCulture
для параметра culture
, так как значение Thread.CurrentCulture может быть разным в момент преобразования регистра и в момент поиска.
Если регистр важен для работы системы безопасности, такие операции ни в коем случае не должны зависеть от языка и региона, чтобы значение параметра CultureInfo.CurrentCulture
не влияло на результат. Пример строковых операций с учетом языка и региональных параметров, дающих противоречивые результаты, см. в разделе "Сравнение строк с использованием текущего языка и региональных параметров" статьи Советы и рекомендации по использованию строк в .NET.
String.ToUpper и String.ToLower
Для ясности кода рекомендуется всегда использовать перегрузки и методы String.ToUpper
, которые позволяют явно указывать язык и String.ToLower
региональные параметры. Например, приведенный ниже код выполняет поиск идентификатора. Операция key.ToLower
по умолчанию зависит от языка и региональных параметров, но это поведение никак не отражено в коде.
Пример
Shared Function LookupKey(key As String) As Object
Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
return internalHashtable[key.ToLower()];
}
Если вы хотите key.ToLower
, чтобы операция не учитывает язык и региональные параметры, измените предыдущий пример, как показано ниже, чтобы явно использовать CultureInfo.InvariantCulture
при изменении дела.
Shared Function LookupKey(key As String) As Object
Return internalHashtable(key.ToLower(CultureInfo.InvariantCulture))
End Function
static object LookupKey(string key)
{
return internalHashtable[key.ToLower(CultureInfo.InvariantCulture)];
}
Char.ToUpper и Char.ToLower
Char.ToUpper
Хотя и методы имеют те же характеристики, что String.ToUpper
и String.ToLower
Char.ToLower
методы, единственные затронутые культуры являются турецкими (Türkiye) и азербайджанцами (латиница, Азербайджан). Только для этих значений языка и региональных параметров изменяется применение регистра для одиночных символов. Дополнительные сведения об этом уникальном сопоставлении регистров см. в разделе "Casing" в документации по классам String . Для ясности кода и обеспечения согласованных результатов рекомендуется всегда использовать перегрузки этих методов, которые принимают CultureInfo параметр.